对标准标识符命名感到困惑

时间:2011-02-06 11:03:15

标签: c# naming-conventions

读一本书,它说这两个是专制的惯例:

  • 不要在标识符中使用下划线
  • 标识符不应以大写字母
  • 开头

但是在很多地方,我可以看到,特别是在属性方面,作者没有遵循这一点,例如:

private int x

public int X ..

与下划线相同..有时他使用_x和X作为属性。

请问正确的命名约定是什么?

6 个答案:

答案 0 :(得分:6)

所有标识符的规则都不相同。并且有多种标准,只要它们被一致地使用,它们都是好的。

我从MS指南中记得:

  • 类(类型)名称和公共成员使用 PascalCasing
  • 私人会员,本地变量和参数使用 camelCasing

但是camelCasing只是意味着“不要以资本开头”,field_fieldmFieldm_field都符合资格。

答案 1 :(得分:4)

除了所有其他的好答案之外,我还要补充说,开始带有两个下划线的标识符是一种不好的做法。 C#规范说我们保留以两个下划线开头的东西具有特殊含义的权利。这是我们的逃生舱,因此如果我们真的需要,我们可以在不破坏任何人的情况下为语言添加新功能。或者,我们可以使用以两个下划线开头的方法作为专用编译器生成的方法。

答案 2 :(得分:3)

正如其他人所提到的,命名约定因开发人员和团队而异。唯一非常重要的是你一致

如果您正在寻找可遵循的准则,Microsoft将为.NET Framework发布一组常规命名约定。他们在网站上有点分散,但this page是一个好的开始。

执行摘要如下:

  • 您应该对所有公共成员,类型和命名空间名称使用Pascal大小写(例如BackColor
  • 您应该使用驼峰套管作为参数名称和局部变量(例如backColor)。

此外,您经常会看到以下划线前缀命名的私有变量(特别是那些具有相应公共属性的变量)(例如_backColor)。另一个惯例是m_

答案 3 :(得分:2)

我不完全确定有正确命名标识符的方式。有些人使用下划线表示成员变量,有些人使用m_前缀。有些使用下划线表示已作为参数传入的变量。

至于大写字母,有些人使用它们,有些则使用“驼峰套管”,这是第一个字母是非资本的,但随后的“字”是,例如:

thisIsCamelCase

重要的是,你是一致的。如果您决定使用_作为成员的前缀,请确保所有成员都具有该约定。

就个人而言,我使用_作为参数的前缀,使用m_作为成员的前缀。

public class Vector
{
    private float m_X;
    private float m_Y;
    private float m_Z;

    public Vector(float _x, float _y, float _z)
    {
        m_X = _x;
        m_Y = _y;
        m_Z = _z;
    } // eo ctor
} // eo class Vector

你的书传讲“绝不会永远不会”然后立刻忽略了它自己的建议,这听起来很狡猾。

答案 4 :(得分:1)

这取决于你所在的品味或团队。

变量永远不会以大写字母或数字开头。 您可以使用下划线,这是许多开发人员首选的,因为所有的现场成员都通过intellisense在visual studio中组合在一起。

private int _number;
private int _Number;

他们中的大多数更喜欢下划线和大写字母,因为在编写普通变量名时,您使用camelCaseNotation。

你会这样写:

private int number;

但是因为你使用下划线,第一个char是下划线而下一个char是大写的(参见camelCaseNotation) 像这样:

private int _Number;

对于属性,您只需使用不带前缀的大写字母编写它们:

public int Number { get; set; }

关于参数,如果您愿意,可以使用与字段成员相同的下划线前缀:

private int _Number;

public MyClass(int _Number) {
  this._Number = _Number;
}

没有对错,只是尝试遵循语言准则并使自己适应您正在使用的团队。与您的团队讨论您将使用的内容,并使用相同的内容,这样可以更好地阅读代码。

关于m_前缀表示法或匈牙利表示法(sName,iNumber,...),这有点“旧”,试图避免这种情况(大多数C / C ++ - 程序员使用C#的新手)。 / p>

答案 5 :(得分:0)

我想补充说,常见的是只使用大写字母表示常量

public const int STATUS_OK = 0;