我看到了两种编码私有成员变量标准的常用方法:
class Foo
{
private int _i;
private string _id;
}
和
class Foo
{
private int m_i;
private string m_id;
}
我相信后者来自C ++。此外,许多人在成员变量(例如double m_dVal
)之前指定类型以指示它是double类型的非常量成员变量?
C#中有哪些约定?
答案 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 ++标准库。