C# .NET类型的私有成员的命名约定

C# .NET类型的私有成员的命名约定,c#,.net,struct,class,C#,.net,Struct,Class,通常,当我在类或结构中有一个私有字段时,我会使用camelCasing,因此当你看到它的名称时,很明显它确实是私有的,但是在我的一些同事的C代码中,我看到他们大部分或有时使用m,就像有某种约定一样 .NET命名约定是否阻止您对成员名称使用下划线 当你提到MS命名约定或其他什么时,他们会告诉你他们的命名约定是最好的方式,但不要解释背后的原因 另外,当我是一些代码的所有者时,我清楚地为私人成员使用camelcasting,当他们必须对代码进行轻微修改时,他们会坚持自己的约定,而不是遵循任何约定 这是

通常,当我在类或结构中有一个私有字段时,我会使用camelCasing,因此当你看到它的名称时,很明显它确实是私有的,但是在我的一些同事的C代码中,我看到他们大部分或有时使用
m
,就像有某种约定一样

.NET命名约定是否阻止您对成员名称使用下划线

当你提到MS命名约定或其他什么时,他们会告诉你他们的命名约定是最好的方式,但不要解释背后的原因

另外,当我是一些代码的所有者时,我清楚地为私人成员使用camelcasting,当他们必须对代码进行轻微修改时,他们会坚持自己的约定,而不是遵循任何约定


这是一个争议吗?

我通常在私有成员变量前面加下划线

它只是让您在阅读代码时更容易发现,这是Microsoft指南所允许的:

public class Something
{
    private string _someString = "";

    public string SomeString
    {
        get
        {
            return _someString;
        }
        set
        {
            // Some validation
            _someString = value;
        }
    }
}

正如其他人所说,更重要的是要始终如一。如果你所在的团队有一套编码标准,以
m
的方式做事,不要试图成为一个叛逆者,而要另辟蹊径。这只会让其他人的事情变得更加困难。

从技术上讲,下划线违反了.NET惯例(或者至少过去是这样,请参见注释线程),但Microsoft程序员自己经常使用下划线,文档中的许多示例都使用下划线。我认为一眼就能看出哪些变量是成员变量(字段),哪些是本地变量是非常有帮助的。下划线确实有帮助。它还很好地将私有成员变量与intellisense中的局部变量分开

有关.NET命名约定,请参见此非常有用的页面:

以下是微软官方推荐的页面:


由于.Net framework指南没有提供关于私有字段的指导,因此允许在私有字段名称上使用
\ucode>或
m
前缀。如果你看反射器中的BCL,你会注意到前缀是最常见的模式


命名字段的参考页位于。请注意,这些准则仅指定公共字段和受保护字段的用法。私有字段不包括在内。

没有任何约定阻止您使用有效的标识符名称。重要的是要始终如一。我对所有私有变量都使用“u”,尽管“正确的方法”(例如ReSharper)似乎希望您声明它们以小写字母开头,并通过使用“this”区分参数和成员。

我真的不相信有任何最好的方法对变量和方法进行装箱。重要的是你和你的团队是一致的。NET命名约定与Microsoft指定它们的方式非常相似,但有些人更喜欢其他约定


个人而言,我倾向于在私有变量和方法前面加上“uu”,然后加上驼峰式大小写,保护变量和方法加上驼峰式大小写,公共变量和方法加上pascal大小写,但这只是我自己。

是的,StyleCop强制执行的命名约定(强制执行MS编码规则)是“无下划线”,“camel case”用于私有实例字段

值得注意的是,常量/静态只读字段具有“Pascal case”命名约定(必须以大写字母开头,但不能使用大写字母)

其他命名约定是C++风格的保留,这是C语言的初始样式,因为C是C团队的来源。

重要提示:是否使用这种编码风格完全取决于开发团队。团队中的每个人使用相同的风格比使用任何特定的风格更重要。

OTOH女士经过深思熟虑后选择了这种风格,所以我用它来打破僵局。如果没有特别的理由使用某种编码样式,我就使用StyleCop。即使在BCL中,您也会看到许多与命名约定不一致的地方,有些类有“
\uuu
”,有些类有“
m
”,有些类只是pascal case版本的属性

下划线很好,因为您可以使用它,尽管Visual Studio的最新版本会警告您这一点。它们也会首先出现在你的智能感知中,避免了用
this.someProperty
来迷惑你的代码或者搜索整个列表

只要团队在一个标准上达成一致,就不会有太大的差别,但在使用下划线5年多之后,我个人不想再回到替代品上来


如果您拥有并维护代码库,我会坚持让他们使用您的标准。如果他们不这样做,那么简单地重构它,再加上一封礼貌的电子邮件,说明你为什么这么做。

有两篇MSDN文章(和)关于设计指南,其中也包含命名约定。可惜的是,他们只限于“公开可见”的东西。他们没有为非公共物品的命名提供指导,据我所知,微软也没有为非公共物品提供官方命名指导

(微软工具)反对在名称中使用下划线。我从开发人员那里听到了两个为什么他们喜欢使用下划线的原因:

  • 它清楚地标记了非公共成员(type_u和intellisense将向您显示所有非公共成员)
  • 它可以防止局部变量(通常也用camelCase编写)、方法参数和非公共字段之间的冲突
在我看来,两者都是使用下划线的好理由,但是我不喜欢它使我的代码看起来如何,所以我也不使用它。如果可能的话,我更喜欢只使用camelCase,并且我添加了一个
这个。
以防与局部变量或方法参数冲突

我们只是试图在团队中保持编码风格的一致性
public string MyVar
{
    get { return myVar; }
    set { myVar = value; }
}