我看到了两种常见的私有成员变量编码标准:
class Foo
{
private int _i;
private string _id;
}
并且class Foo
{
private int m_i;
private string m_id;
}
我认为后者来自于C++。此外,许多人在成员变量之前指定类型(例如double m_dVal
),以表明它是类型为double的非常量成员变量?
C#中的惯例是什么?
我看到了两种常见的私有成员变量编码标准:
class Foo
{
private int _i;
private string _id;
}
并且class Foo
{
private int m_i;
private string m_id;
}
我认为后者来自于C++。此外,许多人在成员变量之前指定类型(例如double m_dVal
),以表明它是类型为double的非常量成员变量?
C#中的惯例是什么?
除了你提到的那两种情况,C#中不给私有成员变量添加前缀也非常普遍。
class Foo
{
private int i;
private string id;
}
这是我所使用的,也是Microsoft内部命名指南推荐使用的。
另请参阅.NET 命名指南。
i
用作属性或字段名称。然而,在使用 for 循环进行迭代时,使用名为 i
的变量进行迭代(甚至使用 j
进行嵌套循环)是标准做法。唯一不这样做的情况是在迭代二维/三维网格时,此时应该使用 x
、y
和 z
。 - Dan Bechard正如Brad Abrams:内部编码指南所指出的:
不要为成员变量添加前缀(
_
,m_
,s_
等)。如果你想区分局部变量和成员变量,你应该在C#中使用“this.
”,而在VB.NET中使用“Me.
”。
我认为在这里最重要的原则是保持一致性。如果您喜欢并且它与您现有的代码风格保持一致,可以使用 "_" 或 "m" 前缀。无论您选择什么,都要坚持一贯性。
我更喜欢使用你的第一个示例或自动属性,这样可以避免在类中定义私有字段:
public String MyString { get; set; }
使用prop
片段可以使这些操作非常快。
以下是微软提供的一般指导:
http://msdn.microsoft.com/en-us/library/ms229002.aspx
C#中的自动属性非常好用,我在能用的时候都会使用它们,但有些情况下它们并不适用,例如在进行类型或值检查时。
总体上,使用驼峰命名法,不要为变量名添加任何前缀,如下划线或类型前缀。
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;
}
}
我更倾向于使用下划线作为私有非常量非只读字段的前缀。为什么?原因如下: 1. 简单地查看变量,我可以区分字段和局部/参数变量。对所有字段使用“this.”不是一个选项——它太长了。 2. 参数和字段之间存在歧义:
class Foo
{
private int id;
public Foo(int id)
{
id = id; //Will compile and work fine. But field will not be initialized.
}
}
我个人一直使用的是你提供的第一个例子:
public class Foo
{
private int _i;
private string _id;
}
事实上,我的整个团队都在使用这种方式。此外,你提到的m_dVal
被称为匈牙利命名法,可以查看维基百科条目了解更多信息。然而,匈牙利命名法实际上违反了我们团队的编码标准,因此我从不使用它。
我不喜欢为成员变量添加任何前缀。对于在方法外声明的变量,我使用"this.memberVariableName"来将它们与在方法内声明的变量区分开来。
_
。 - Zimano