私有类字段的代码套管问题

时间:2010-03-16 13:33:23

标签: c#

总结一下,有两个基本的思路:

  • 私有字段应该是CamelCase以匹配.NET准则
  • 私有字段应该是CamelCase,但使用_ pre-attached来告诉方法范围变量和类范围变量之间的区别。

原帖

采取以下示例

public class Class1{

    public string Prop1{
        get {return m_Prop1;}
        set {m_Prop1 = value; }
    }
    private string m_Prop1; // This is standard private property variable name.

    // How do we cap this variable name? While the compiler can figure out same casing
    // it makes it hard to read.
    private Class2 Class2;

    // We camel case the parameter.
    public Class1(Class2 class2){
      this.Class2 = class2;
    }
}

这是我的股票规则

  • 班级名称大写(Class1)
  • 公共财产大写(Prop1)
  • 与公共财产绑定的私人字段有m_来表明这一点。我的同事更喜欢_。如果完全使用m__,就会有一些争论,就像Hungarian notation一样。
  • 私有类字段大写。

我想弄清楚的部分是当私有字段的类名与私有字段名匹配时我该怎么办。例如,私有Class2 Class2; 。这很令人困惑。

如果私有字段名称不是同一个类,例如私有字符串名称; ,则没有太多问题。

或者我是以错误的方式思考问题?我的类和私有字段是否应该以不会发生冲突的方式命名?

===

下面的共识是使用小写的私有财产名称,但后来我们遇到了这个问题。

class1{
    private string name; // This is scoped to the class.

    public void Set(){
      string firstName; // This is scoped to the method.
      .... // Lot of code.
      // Should use this.name but nothing prevents.
      // Now there is confusion if name is a class property or scoped to the method.
      name = firstName;
}

6 个答案:

答案 0 :(得分:11)

您应该关注微软的naming guidelines

请记住运行代码分析,以确保您做得对。

答案 1 :(得分:7)

或ReSharper的指导方针。

私有财产,与任何其他财产一样。 私有字段是小写字母,以下划线开头。

    private string _foo = string.Empty;
    private string Bar { get; set; }

答案 2 :(得分:3)

如果您坚持使用.NET Framework的编码约定,我认为您的问题将得到解决。例如,私人成员以小写字母开头。

答案 3 :(得分:3)

我想说不要使用m__作为私有字段的前缀并更好地命名您的字段,如果名称更好,则默认情况下不会发生冲突。

答案 4 :(得分:1)

如前所述,您应遵循框架设计指南。 但是我很好奇你为什么在“与公共财产相关的私人领域”和“私人领域”之间的命名惯例不同


关于您问题的更新版本: 如果你的方法太长以至于你无法区分变量是否在方法体中或作为参数被解除,那么你应该考虑折射.... 这是我到目前为止听到的这个问题的最佳答案,但它并不是最好的。

答案 5 :(得分:0)

他们应该以不碰撞的方式命名,恕我直言