背景:
   公司当前使用的命名方法:
     字段   属性   参数   变量
     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.所以我们归结到最后的问题,变量采用何种命名方法?
       大家说说自己采用的作法。

解决方案 »

  1.   

    扩展前:
    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 = "";// 出现命名冲突
           ...
        }
    }
      

  2.   

    to:ycc2008(皮皮) 
    你说的属性代替是什么意思?
      

  3.   

    嗯,比如是一个Name属性,需要在构造函数设置
    我会这么做:class Person
    {
    string _Name;
    public string Name
    {
    get{return _Name;}
    }public Person(string name)
    {
    _Name = name;
    }
    }
      

  4.   

    string _Name;
    好像不符合命名规范啊?
      

  5.   

    或者这样做:
    局部变量采用Camel;
    实体字段采用Camel,在方法中使用时前面加上this,这样不会和局部变量发生冲突;
    静态字段采用Pascal;
      

  6.   

    加this是个办法
    不过到处都是this的写起来麻烦在对外不可见的情况下,不符合规范也没啥吧
      

  7.   

    我们公司的命名规约:
    type + Name ...比如string: strXXX,
        integer: intXXX,
        class: clsXXX
    类中的成员,m_XXX 
      

  8.   

    我们目前使用的也类似:strName,iLen...,也算匈牙利命名法的变种吧,
    在c/c++中广泛使用,现在用c#,微软不推荐这种命名法。
      

  9.   

    我们目前使用的也类似:strName,iLen...,也算匈牙利命名法的变种吧,
    在c/c++中广泛使用,现在用c#,微软不推荐这种命名法。
      

  10.   

    用Guid做变量名
    绝对不会冲突!!!!!!!!!!!!
      

  11.   

    公司名称+部门名称+模块+定义者名称+如
    MS_WinXP_IE_ZYL_thisVar
         
      

  12.   

    TO: Ivony
    加下划线前缀区分正是微软的编码风格,我也在使用这种风格。你说的区分是:变量前面加上_,字段前面不用加?
      

  13.   

    微软的做法是,所有的private和internal型的变量、方法和属性都加上_前缀。另外,对于可能存在命名冲突的东西,采取两个甚至三个单词命名:
    例如: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(类)
    对于不常用的类,利用额外的名称空间避开冲突,要求在引用时采取全名称空间引用。
      

  14.   

    其实,如果全部用全名,应该是不存在什么避免冲突的,因为只要能通过编译,总能找到精确指定某个类或实例、属性、方法的表达式。避免冲突个人认为是两点:一是使得名称不会产生歧义,例如WebRequest和HttpRequest。二是使用的时候方便,例如SqlDataReader和OledbDataReader。我们就不用System.Data.SqlClient.DataReader和System.Data.Oledb.DataReader了。。