我正在做一个小型的企业实习,在他们的代码中我找到了这样命名的类:
public class FlagsConfig
{
private static FlagsConfig _instance;
}
_instance
是C#中的任何类型的命名约定吗?
我会问开发人员,但他们今天和下周都在某些课程上。
答案 0 :(得分:35)
也许这可以帮到你:.net Naming Conventions and Programming Standards - Best Practices
根据这份文件,没关系。
答案 1 :(得分:26)
对于私有成员,有许多不同的约定。有些人喜欢前缀,有些人不喜欢(我个人不喜欢)。有些人喜欢区分实例变量和静态变量,有些则不喜欢:
private string m_foo;
private static string s_foo;
就我个人而言,当我阅读文本时,我发现下划线会妨碍我 - 我坚信这取决于你怎么读;当我阅读时,我会进行subvocalize,而额外的位则妨碍了这一点。对于其他人来说,这显然不是问题。其他人发现局部变量和成员变量之间缺乏区别是一个问题 - 我通常会编写简短的方法,无论如何它显然是什么。
更重要的是 - 当然,如果您正在创建API等,则是公开可见成员(包括受保护成员和参数名称)的命名,此时您应该查看Microsoft guidelines。
答案 2 :(得分:21)
_instance是C#中的任何类型的命名约定吗?
首先,很多人都参考了命名指南。请注意,其中许多指南仅适用于某种类型的 public 表面区域。像你提到的那些私人成员是内部实施细节,因此受到制作它们的组织的政策的约束,不受人们期望在公共元素中看到的框架设计指南的约束。
对于私有实现细节,底栏前缀在许多组织中很常见。我个人认为没有必要,但有些人似乎喜欢它。
重要的是即使对于私有实现细节,也不要使用两个下划线。 C#编译器团队保留以两个下划线开头的任何单词的权利,以便我们选择任何含义在该语言的某些未来版本中。这是我们的“逃生舱”,万一我们真的需要添加一个新的非上下文保留关键字,真的,真的不想破坏任何现有的代码。
这在C#4规范的第2.4.2节中有记载。
答案 3 :(得分:13)
是的,这是私有字段的通用命名标准:
http://csharpguidelines.codeplex.com/
我碰巧同意@JonSkeet认为下划线很乱,但AFAIK是MS的标准。他链接到的文件表明不使用图书馆中的下划线,但我认为这是指公众成员。
<强>更新强>
第一个环节实际上提倡相反;不要使用下划线。我的错,但它仍然是一个有用的资源。
为了尊重Skeet先生,我进一步遵循他的链接:http://msdn.microsoft.com/en-us/library/ms229012.aspx,其中也指出你不应该使用下划线,但该指导适用于静态,受保护和公共成员,但不一定适用于私人成员。
底线 :是的,这是一个通用标准,但在尝试查找/使用外部标准之前,首先使用任何内部商定的标准。
答案 4 :(得分:8)
有许多指南和标准可供选择,但如果您工作场所使用的标准使用下划线,那么您需要使用它。特别是如果你只是在那里实习,目标应该是保持一致(在那个行业内),而不是遵循一些“更好”(但不同)的标准。
问问你的开发人员(或者更高级别的老板)或许他们使用的标准是否有任何文档/链接可能是更好的问题?
答案 5 :(得分:4)
这在我的经历中相对常见。为了帮助识别特定类型的变量(私有,方法参数等),开发人员可以使用不同的命名条件。
e.g。
我认为这会因公司而异。
答案 6 :(得分:4)
_name
凌乱,混乱且非常古老。不要这样做。
.NET 4.0常规命名约定 http://msdn.microsoft.com/en-us/library/ms229045.aspx
如您所见,MSDN声明
请勿使用下划线,连字符或任何其他非字母数字字符
答案 7 :(得分:3)
我喜欢使用大小写更改来区分字段和属性:
// A private field
private Boolean someValue;
// A public property, exposing my private field
public Boolean SomeValue {
get { return someValue; }
set { someValue = value; }
}
答案 8 :(得分:3)
您的同事是前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。
答案 9 :(得分:2)
有两种常见的约定。
第一个是“用户下划线为字段标记” 第二个是“使用s_表示静态字段,m_表示intance字段”
imo这是一个宗教问题,重要的是不要混淆两种风格。
本书包含许多关于惯例和设计指南的好主意
答案 10 :(得分:1)
根据StyleCop [Microsoft的样式/约定检查工具],不应该这样做。请参阅:http://stylecop.soyuz5.com/SA1309.html
此外,问题可能是To underscore or to not to underscore, that is the question
答案 11 :(得分:1)
人们遵循许多命名惯例
myFirstVar = Camel Notation
Camel notaion通常用于公共变量(不是私有变量)。
MyFirstVar = Pascal Notation
Pascal通常用于命名类和方法。
str_MyFirstVar = Hungarian Notation // if variable is of type string
匈牙利表示法被认为是最古老的但不再使用。
_myFirstVariable = used for private fields in general