背景:
公司当前使用的命名方法:
字段 属性 参数 变量
Camel Pascal 匈牙利 匈牙利
好处:
1.能够明显的区分字段和参数、变量,在扩展类时,增加字段,不怕引起和参数、变量的冲突,从而需要修改旧有代码。
坏处:
1.当参数、变量的类型发生变化时,需要大量修改代码。
例:曾经将 编码数据元素的枚举值从string改为int,不仅需要修改变量定义,还需要修改变量的使用。
准备采取的命名方法:(也是微软推荐的标准,无变量命名指南)
字段 属性 参数 变量
Camel Pascal Camel Camel
好处:
1.当参数、变量的类型发生变化时,只需要修改变量定义,再稍微关注变量的使用。
例:曾经将 编码数据元素的枚举值从string改为int,不仅需要修改变量定义,还需要修改变量的使用。
坏处:
1.不能够区分字段和参数、变量,在扩展类时,增加字段,可能会引起和参数、变量的冲突,从而需要修改旧有代码。
分析:
1.属性确定使用Pascal,字段、参数、变量不使用Pascal,从而保证属性不会和字段、参数、变量发生命名冲突。
结论1:属性确定使用Pascal,字段、参数、变量不使用Pascal
2.以下分析字段、参数、变量的命名冲突问题。
由于参数和变量作用于同一个方法,由同一个程序员控制,我们可以采用同一种命名方法。
结论2:参数和变量采用同一种命名方法。
3.剩下的就是分析字段、变量的命名冲突问题。
字段作用于类,由设计师进行命名;
变量作用于方法,由程序员进行命名;
如果 字段和变量采用同一种命名方法,可能会出现以下场景:
1.设计师A设计了类 user
2.程序员B实现了user的方法,其中使用了变量 departName
3.由于新的需求,设计师A扩展了类user,增加属性DeapartName、字段departName
4.程序员B编码时,发现变量departName和字段departName发生冲突。
对于扩充字段来说,方法中的每一个变量都是一个陷阱,需要避开,这是很难做到的事情。
结论3:字段和变量需要采用不同的命名方法。
字段采用Camel方法,这是一种普遍的作法,也是当前使用的作法,所以我们不改变。
结论4:字段采用Camel方法。
4.所以我们归结到最后的问题,变量采用何种命名方法?
大家说说自己采用的作法。
公司当前使用的命名方法:
字段 属性 参数 变量
Camel Pascal 匈牙利 匈牙利
好处:
1.能够明显的区分字段和参数、变量,在扩展类时,增加字段,不怕引起和参数、变量的冲突,从而需要修改旧有代码。
坏处:
1.当参数、变量的类型发生变化时,需要大量修改代码。
例:曾经将 编码数据元素的枚举值从string改为int,不仅需要修改变量定义,还需要修改变量的使用。
准备采取的命名方法:(也是微软推荐的标准,无变量命名指南)
字段 属性 参数 变量
Camel Pascal Camel Camel
好处:
1.当参数、变量的类型发生变化时,只需要修改变量定义,再稍微关注变量的使用。
例:曾经将 编码数据元素的枚举值从string改为int,不仅需要修改变量定义,还需要修改变量的使用。
坏处:
1.不能够区分字段和参数、变量,在扩展类时,增加字段,可能会引起和参数、变量的冲突,从而需要修改旧有代码。
分析:
1.属性确定使用Pascal,字段、参数、变量不使用Pascal,从而保证属性不会和字段、参数、变量发生命名冲突。
结论1:属性确定使用Pascal,字段、参数、变量不使用Pascal
2.以下分析字段、参数、变量的命名冲突问题。
由于参数和变量作用于同一个方法,由同一个程序员控制,我们可以采用同一种命名方法。
结论2:参数和变量采用同一种命名方法。
3.剩下的就是分析字段、变量的命名冲突问题。
字段作用于类,由设计师进行命名;
变量作用于方法,由程序员进行命名;
如果 字段和变量采用同一种命名方法,可能会出现以下场景:
1.设计师A设计了类 user
2.程序员B实现了user的方法,其中使用了变量 departName
3.由于新的需求,设计师A扩展了类user,增加属性DeapartName、字段departName
4.程序员B编码时,发现变量departName和字段departName发生冲突。
对于扩充字段来说,方法中的每一个变量都是一个陷阱,需要避开,这是很难做到的事情。
结论3:字段和变量需要采用不同的命名方法。
字段采用Camel方法,这是一种普遍的作法,也是当前使用的作法,所以我们不改变。
结论4:字段采用Camel方法。
4.所以我们归结到最后的问题,变量采用何种命名方法?
大家说说自己采用的作法。
解决方案 »
- HttpWebRequest抓取的内容为什么和IE上的源码不一样
- 引发类型为“System.ExecutionEngineException”的异常。
- C#中可不可以使用CPU寄存器?
- 如何在数据集中添加带参数的Query /Table?
- 如何在代码中捕获sql异常?
- 关于word控制问题!!!!(急用)
- C#中非模式窗体之间如何传递数据
- 怎么控制gridview 的表头字体
- WebRequest怎样区分提交方法是Get还是Post?
- 关于修改DataGridView行记录时的光标乱跳的问题,困惑很久了,特求解
- 怎样让鼠标在某个点单击,象鼠标精灵那样自动单击?
- 在线等待:如何通过app.config配置来自动寻找应用程序所需的数据库?谢谢!
public class user
{
private string name = "";
public string Name
{
get...;
set...;
}
public void test()
{
...
string departName = "";
...
}
}
扩展后:
public class user
{
private string name = "";
public string Name
{
get...;
set...;
}
private string departName = "";
public string DepartName
{
get...;
set...;
}
public void test()
{
...
string departName = "";// 出现命名冲突
...
}
}
你说的属性代替是什么意思?
我会这么做:class Person
{
string _Name;
public string Name
{
get{return _Name;}
}public Person(string name)
{
_Name = name;
}
}
好像不符合命名规范啊?
局部变量采用Camel;
实体字段采用Camel,在方法中使用时前面加上this,这样不会和局部变量发生冲突;
静态字段采用Pascal;
不过到处都是this的写起来麻烦在对外不可见的情况下,不符合规范也没啥吧
type + Name ...比如string: strXXX,
integer: intXXX,
class: clsXXX
类中的成员,m_XXX
在c/c++中广泛使用,现在用c#,微软不推荐这种命名法。
在c/c++中广泛使用,现在用c#,微软不推荐这种命名法。
绝对不会冲突!!!!!!!!!!!!
MS_WinXP_IE_ZYL_thisVar
加下划线前缀区分正是微软的编码风格,我也在使用这种风格。你说的区分是:变量前面加上_,字段前面不用加?
例如:HtmlSelect、HtmlInputText、HtmlInputButton。HttpRequest(避免与其实例Request冲突),HttpWebRequest(避免与HttpRequest冲突),SqlDataAdapter。但对于很难同时使用的两个名称空间,例如System.Windows.Forms和System.Web.UI,就不再分WinDataGrid和WebDataGrid还有WinControl和WebControl了。微软的.NET Framework避免命名冲突的一些方法,仅供参考:类名和实例名之间的冲突避免:如果实例是内部使用,修改实例名,Camel、加前缀或者截短来解决。而如果实例名对外,则修改类名,给类名增加更多描述,常见的就是加上不同的描述前缀,例如Http、Web、Html等,这常见于成系列的类。不成系列的类,则方法各异,例如Regex、Caching、Threading等等,以添加ing后缀为多。类名与名称空间的冲突,在名称空间后面加s解决,例如System.Web.UI.HtmlControls(名称空间)和System.Web.UI.HtmlControl(类)
对于不常用的类,利用额外的名称空间避开冲突,要求在引用时采取全名称空间引用。