C#.NET实例变量命名约定?

时间:2011-11-04 08:17:51

标签: c# .net naming-conventions naming

我正在做一个小型的企业实习,在他们的代码中我找到了这样命名的类:

public class FlagsConfig
{
    private static FlagsConfig _instance; 
}

_instance是C#中的任何类型的命名约定吗?

我会问开发人员,但他们今天和下周都在某些课程上。

12 个答案:

答案 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。

  • VARIABLENAME
  • variableName(camel case)
  • _variable
  • VARIABLE_NAME

我认为这会因公司而异。

答案 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这是一个宗教问题,重要的是不要混淆两种风格。

本书包含许多关于惯例和设计指南的好主意

http://www.amazon.de/Framework-Design-Guidelines-Conventions-Development/dp/0321545613/ref=sr_1_1?ie=UTF8&qid=1320395003&sr=8-1

答案 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