繁体   English   中英

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

[英]C# .NET instance variable naming convention?

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

public class FlagsConfig
{
    private static FlagsConfig _instance; 
}

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

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

也许这可以帮助您: .net命名约定和编程标准 - 最佳实践

根据这份文件,没关系。

对于私人会员,有许多不同的约定。 有些人喜欢前缀,有些人不喜欢(我个人不喜欢)。 有些人喜欢区分实例变量和静态变量,有些则不喜欢:

private string m_foo;
private static string s_foo;

我个人觉得下划线时,我正在读文本的方式获得-我坚信这取决于你怎么看; 当我阅读时,我会进行subvocalize,而额外的位则妨碍了这一点。 对于其他人来说,这显然不是问题。 其他人发现局部变量和成员变量之间缺乏区别是一个问题 - 我通常会编写简短的方法,而这显然是什么,无论如何。

更重要的是 - 当然,如果您正在创建API等,则是公开可见成员(包括受保护成员和参数名称)的命名,此时您应该查看Microsoft准则

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

首先,许多人引用了命名准则。 请注意,其中许多指南仅适用于某种类型的公共表面区域。 像你提到的私人成员是内部实施细节,因此受制于制作它们的组织的政策的约束,不受人们期望在公共元素中看到的框架设计指南的约束。

对于私有实现细节,底栏前缀在许多组织中很常见。 我个人认为没有必要,但有些人似乎喜欢它。

但重要的是, 即使对于私有实现细节,您也不应该使用两个下划线。 C#编译器团队保留以两个下划线开头的任何单词的权利,以具有我们在该语言的某个未来版本中选择的任何含义。 这是我们的“逃生舱”,万一我们确实需要添加一个新的非上下文保留关键字,真的,真的不想破坏任何现有的代码。

这在C#4规范的2.4.2节中有记录。

是的,这是私有字段的通用命名标准:

http://csharpguidelines.codeplex.com/

我碰巧同意@JonSkeet认为下划线很乱,但AFAIK是MS的标准。 他链接的文件表明你的图书馆没有使用下划线,但我认为这是指公众成员。

更新

第一个环节实际上提倡相反的; 不要使用下划线。 我的错,但它仍然是一个有用的资源。

为了尊重Skeet先生,我进一步关注他的链接: http//msdn.microsoft.com/en-us/library/ms229012.aspx ,它还声明你不应该使用下划线,但该指导适用于静态,受保护的和公共成员,但不一定是私人成员。

底线 :是的,它是一种通用标准,但在尝试查找/使用外部标准之前,首先使用任何内部商定的标准。

有许多指南和标准可供选择,但如果您工作场所使用的标准使用下划线,那么您需要使用它。 特别是如果你只是在那里实习,目标应该是保持一致(在那个行业内),而不是遵循一些“更好”(但不同)的标准。

或许问问你的开发人员(或更高级别的老板)的更好的问题是,他们是否有关于他们使用的标准的任何文档/链接?

这在我的经历中相对常见。 为了帮助识别特定类型的变量(私有,方法参数等),开发人员可以使用不同的命名条件。

例如

  • 变量名
  • variableName(驼峰案例)
  • _变量
  • 变量名

我认为它往往因公司而异。

_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中

有两种常见的约定。

第一个是“用户下划线为字段标记”,第二个是“使用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

根据StyleCop [Microsoft的样式/约定检查工具],不应该这样做。 请参阅: http//stylecop.soyuz5.com/SA1309.html

此外,问题是可能强调要强调或不强调,这就是问题

人们遵循许多命名约定

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM