我在一家公司实习,他们的代码中有些类的命名方式如下:
public class FlagsConfig
{
private static FlagsConfig _instance;
}
_instance
在C#中是一种命名约定吗?
我想问开发人员,但他们今天和下周都在参加课程。
我在一家公司实习,他们的代码中有些类的命名方式如下:
public class FlagsConfig
{
private static FlagsConfig _instance;
}
_instance
在C#中是一种命名约定吗?
我想问开发人员,但他们今天和下周都在参加课程。
private
成员前加上下划线的主要原因是避免与public
访问器发生命名冲突。 - Simon Richterprivate object something; public Ctor(object something){ this.something = something;}
。如您所见,这确实可行,但是您必须在每次使用时指定 this
关键字。因此使用 _something
表示私有字段更合理。 - Eric Liprandi对于私有成员,有许多不同的约定。有些人喜欢使用前缀,有些人不喜欢(我个人不喜欢)。有些人喜欢区分实例变量和静态变量,而另一些人则不这样做:
private string m_foo;
private static string s_foo;
就我个人而言,当我阅读文本时,下划线会妨碍我的阅读 - 我坚信这取决于你的阅读方式;我在阅读时会发声,并且这些额外的部分会妨碍我的发声。对于其他人来说,显然不是问题。其他人发现本地变量和成员变量之间缺乏区分成为问题 - 在我通常编写明显的短方法的情况下,无论如何都能清楚地知道哪个是哪个。
更重要的是 - 特别是如果你正在创建一个API等等,公开可见成员(包括受保护的成员和参数名称)的命名,此时应该查看Microsoft指南。
mVariable
不好而IType
好 - Java做得对,只需命名它们是什么,而不是表示/注释。 - nawfalmVariable
部分不太感冒,但是我喜欢接口前缀。我发现这样做可以增加清晰度。当然,你的想法可能有所不同。 - Jon Skeet__arglist
和 TypedReference 关键词都以__
开头的原因? - configurator是的,这是私有字段的通用命名标准:
http://csharpguidelines.codeplex.com/
我同意 @JonSkeet 的看法,下划线很混乱,但据我所知,这是微软的标准。他提供的文件表明您的库中不要使用下划线,但我认为那是指公共成员。
更新
第一个链接实际上提倡相反的做法;不要使用下划线。我的错,但它仍然是一个有用的资源。
为了尊重Skeet先生,我跟随他的链接到更深入地了解:http://msdn.microsoft.com/en-us/library/ms229012.aspx,它也指出您不应该使用下划线,但该指导仅适用于静态、受保护和公共成员,而不一定适用于私有成员。
底线:是的,这是一种通用标准,但在寻找或使用外部标准之前,请首先使用任何内部协商一致的标准。
有很多指南和标准可供选择,但如果您的工作场所使用下划线作为标准,那么您需要使用它。特别是如果您只在实习期间工作,目标应该是保持一致性(在该业务范围内),而不是遵循某个“更好”的标准(但不同)。
也许更好的问题是向您的开发人员(或高层领导)询问他们是否有任何关于他们使用的标准的文档/链接?
根据我的经验,这是比较常见的现象。为了帮助识别特定类型的变量(私有变量、方法参数等),开发人员可能会采用不同的命名条件。
例如:
我认为这往往因公司而异。
_name
这种命名方式混乱、令人困惑,而且非常老式。不要使用。
.NET 4.0通用命名规范 http://msdn.microsoft.com/en-us/library/ms229045.aspx
正如您所见,MSDN指出:
不要使用下划线、连字符或其他任何非字母数字字符
我喜欢使用大小写来区分字段和属性:
// A private field
private Boolean someValue;
// A public property, exposing my private field
public Boolean SomeValue {
get { return someValue; }
set { someValue = value; }
}
你的同事以前是VB开发人员吗?在VB.Net中,下划线常用于属性或类的私有成员。由于VB不区分大小写,因此无法使用大小写来区分。
Private _someValue As Boolean
Protected Property SomeValue() As Boolean
Get
Return _someValue
End Get
Set(ByVal value As Boolean)
_someValue = value
End Set
End Property
更新: 顺便提一下,.NET源代码中的许多类都使用这种约定。特别是在System.Web中。