私有成员变量的C#编码标准

时间:2009-04-13 12:50:45

标签: c# coding-style

我看到了两种编码私有成员变量标准的常用方法:

class Foo
{
    private int _i;
    private string _id;     
}

class Foo
{
    private int m_i;
    private string m_id; 
}

我相信后者来自C ++。此外,许多人在成员变量(例如double m_dVal)之前指定类型以指示它是double类型的非常量成员变量?

C#中有哪些约定?

12 个答案:

答案 0 :(得分:61)

除了你提到的两个,在C#中很常见的是没有私有成员的前缀。

class Foo
{
    private int i;
    private string id; 
}

这就是我使用的内容,也是Microsoft's internal naming guidelines中推荐的内容。

答案 1 :(得分:14)

正如Brad Abrams: internal coding guidelines所述:

  

不要为成员使用前缀   变量(_m_s_等)。如果你   想要区分本地和   你应该使用的成员变量   C#中的“this.”和VB.NET中的“Me.”。

答案 2 :(得分:12)

我认为这里的重要原则是你是一致的。如果您喜欢这样做,请使用“_”或“m”前缀,这与您正在使用的其余代码一致。无论你选择什么,坚持下去并保持一致。

答案 3 :(得分:10)

我更喜欢使用您的第一个示例,或者像这样的自动属性,这样可以避免在您的类中定义私有字段:

public String MyString { get; set; }

使用prop代码段使这些非常快。

答案 4 :(得分:7)

正如我从阅读Framework Design Guidelines回忆的那样,私有成员变量确实没有固定约定,除了一个不应该使用匈牙利表示法,一个不应该大写变量名的第一个字母(使用Camel-casing) )。书中有引号支持您的两个示例,并且根本不使用任何前缀。

就个人而言,我更喜欢“m_”前缀。

答案 5 :(得分:6)

Microsoft的一般指导:

http://msdn.microsoft.com/en-us/library/ms229002.aspx

C#中的自动属性非常好,我可以随时使用,但有些情况下它们对我不起作用,例如在set方法上进行类型或值检查时。

一般情况下:使用驼峰套管,不要在名称前加上下划线或类型前缀等字样。

public int Age {get; set;}

private int age;
public int Age
{
    get { return age; }
    set
    {
        if(value < 0)
            throw new InvalidOperationException("Age > 0");
        age = value;
    }
}

答案 6 :(得分:5)

我个人总是使用你的第一个例子:

    public class Foo
    {
        private int _i;
        private string _id;
    }

事实上,这就是我整个团队使用的内容。另外,您提到的m_dVal被称为匈牙利表示法,这里是Wikipedia Entry。匈牙利表示法实际上违反了我们团队的编码标准,所以我从不使用它。

答案 7 :(得分:4)

最好是使用项目中已经使用的任何内容。如果您开始一个新项目,请使用公司最常使用的任何项目。

答案 8 :(得分:3)

我更喜欢下划线作为私有非const非读取字段的前缀。为什么?原因: 简单地看变量我可以区分字段和字段。本地/参数变量。使用“这个”。对于所有领域都不是一个选择 - 它更长。 2.参数和字段之间存在歧义:

class Foo
{
  private int id;
  public Foo(int id)
  {
    id = id; //Will compile and work fine. But field will not be initialized.
  }
}

答案 9 :(得分:1)

我倾向于使用第一个约定,一个简单的下划线。我也没有在名称中指定类型,因为我有Intellisense告诉我它是什么(我知道,它可以是一个拐杖)。

最好与你的同事或项目团队成员核实,然后决定一个约定,其中一些是任意的。

答案 10 :(得分:1)

我不想在成员变量中使用任何前缀。对于在方法之外声明的那些,我使用“this.memberVariableName”来区别于方法中声明的那些。

答案 11 :(得分:0)

在以_开头的C ++标识符被认为是不好的做法,它们应该留给内部使用。我认为这就是为什么用_作为变量名前缀有时被认为是C#中的不良做法...虽然没有理由不能这样做,因为所有的.NET内部都被正确封装,不像C / C ++标准库。