一些C#命名约定问题

时间:2009-08-05 14:04:31

标签: c# variables naming-conventions constants private

1) 声明变量的政策是什么?如果总是使用关键字private,还是可以跳过它?

string MyVar1;

VS

private string MyVar1;

我看到的唯一原因是Microsoft有一天可以将默认访问修饰符更改为public而不是private

哪里是否说私有是可选的?对MSDN的任何引用?

2) 常量的命名策略?

我在编写常量时总是使用大写字母,但有朋友告诉我这是违反Microsoft命名策略的,是吗?

const string MYVAR1;

VS

const string myVar1;

3) 帕斯卡或骆驼?

我个人认为骆驼看起来很丑陋。

15 个答案:

答案 0 :(得分:22)

1)private关键字是可选的。我非常怀疑微软是否会改变字段的默认可见性,因为这将是一个巨大的,突破性的变化(更不用说一个愚蠢的变化)。省略private关键字只是个人品味问题。

2)不要使用“shouty”常量 - 遵循框架惯例并使用pascal大小写(例如ThisIsAConstant优于THIS_IS_A_CONSTANT)。

答案 1 :(得分:13)

您可能对Microsoft的Design Guidelines For Class Library Developers

感兴趣

答案 2 :(得分:5)

不直接回答您的问题,但也许您会对Microsoft的StyleCop感兴趣。这是一个用于分析样式和一致性规则的源代码的工具。默认情况下,它强加了Microsoft的样式指南。

答案 3 :(得分:2)

根据MS指南命名consts的官方建议,因为没有人实际完全指定它是:

  • 对包含一个或两个字符的名称使用全部大写,即System.Math.PI,System.Math.E
  • 对于等于或超过3个字符的任何内容,请使用PascalCasing

答案 4 :(得分:1)

私有是可选的,但额外打字。我想跳过它。

至于constancts,这取决于您的偏好以及您与谁合作。但是如果有疑问,请查看.NET Framework以及它们如何命名常量。

答案 5 :(得分:1)

私有字段名称也应该是驼峰式的,可选地带有前缀_或m_:

    private int count;
or
    private string _name;
or
    private decimal m_price;

答案 6 :(得分:1)

我怀疑微软是否会改变C#成员变量的默认行为。我会声明你想要私密的私密事物,并明确声明你要公开的事情只是为了清楚,如果没有别的。

我认为常量的重要规则是只使用每个人都同意的命名约定,并且你认为它是常量。如果每个人都喜欢所有大写,那么就使用它。如果你想更加标准,虽然使用Pascal套管。

答案 7 :(得分:1)

私人是可选的,因此您可以跳过它。

但是,如果您的类中包含私有,受保护和公共数据成员,那么为了便于阅读,最好指定成员是私有的。

答案 8 :(得分:1)

就个人而言,如果常量是ALL_CAPS,就像其他语言一样,我会喜欢它...我认为这是一种快速简便的方法来发现常数。尽管如此,由于其他常量内置于框架UsePascalCasing中,您也应该这样做。一致性非常重要。

就“Pascal vs. Camel”而言,您遇到了同样的问题。如果您只是自己编程,从头开始,您可以做任何您想做的事情。但是,由于您使用的是预先存在的框架,为了保持一致性,您应该模仿相同的样式。另外,一旦你习惯它,你可能会发现遵循相同的规则集实际上会有所帮助,因为你会立即知道某个东西是参数或局部变量(camelCasing)与属性或常量(PascalCasing)

答案 9 :(得分:1)

  

在字段名称中使用Pascal大小写。

来自.NET Framework Developer's Guide Names of Type Members

  

对所有公众使用Pascal套管   成员,类型和命名空间名称   由多个单词组成。

     

请注意,此规则不适用于   实例字段。原因是这样的   详细的会员设计   指南,你不应该公开使用   实例字段。

来自.NET Framework Developer's Guide Capitalization Conventions

注意常量命名中Pascal套管的隐含标准。

  

对常量使用常量字段   永远不会改变。

     

编译器会烧掉const的值   字段直接进入调用代码。   因此,const值永远不会   改变没有破坏的风险   兼容性。

public struct Int32 {
  public const int MaxValue = 0x7fffffff;
  public const int MinValue = unchecked((int)0x80000000);
}

来自框架设计指南:可重用.NET库的约定,惯用法和模式,第二版第161页

我找不到任何关于你是否应该使用术语private来装饰私有字段的引用。这更像是我认为的内部风格选择。无论你选择哪种,你都希望保持一致。

答案 10 :(得分:0)

1)我倾向于使用私有,只是为了明确,但我真的没有必要猜测

2)确实,微软建议不要使用常量上限。

可以找到Microsoft here

的类型成员的命名约定gyuidelines

答案 11 :(得分:0)

这是一本带有C#和VB .net编码指南的免费电子书,非常好

Link to ebook download

就个人而言,我喜欢明确指定某些东西是私有的,为了便于阅读,事实上我已经习惯这样做,以至于当我看不到它时我会感到困惑。至于常数,我使用PascalCasing。

答案 12 :(得分:0)

您可能对.NET Framework的 Microsoft自己的内部编码指南感兴趣,因为revealed by Brad Abrams in his blog

遵循内部和外部成员的所有.NET Framework设计指南。其中的亮点包括:

  • 请勿使用匈牙利表示法
  • 不要为成员变量使用前缀(,m ,s_等)。如果你想区分
  • 在本地变量和成员变量之间,您应该在C#中使用“this。”,在VB.NET中使用“Me。”。
  • 使用camelCasing作为成员变量
  • 请使用camelCasing参数
  • 将camelCasing用于局部变量
  • 请将PascalCasing用于函数,属性,事件和类名
  • 前缀接口名称为“I”
  • 不要在枚举,类或代理前加上任何字母

答案 13 :(得分:0)

@Dan Diplo     #不要为成员变量(,m,s_等)使用前缀。如果你想区分本地和成员变量之间的#,你应该在C#中使用“this。”,在VB.NET中使用“Me。”。

这是非常有争议的。前缀有助于智能感知:你输入前缀字符并获取本地私有实例字段的列表。有了这个。您将获得一个完整列表,其中包含方法,字段,属性,事件等。

还要考虑以下示例:

private int _count; 
private int total; 
private decimal price; 

public MyClass(int count, int total, decimal price) 
{ 
    _count = count;     // correct 
    this.total = total; // correct 
    price = price;      // wrong! you forgot this. qualifier 
} 

答案 14 :(得分:0)

在C#中,可见性默认为最有限的可见性。没有修饰语:

  • 非内部类是内部的
  • 内部类是私有的
  • 班级成员是私人的

因为最好尽可能地限制可见性,我尝试始终不使用默认可见性所需的修饰符。这使得那些不是的成员更加明显,这有助于让我关注他们是否真的需要那么可见。

对于常量,我的偏好是将它们放在它们自己的类中,以便ClassName.ConstantName格式使它显而易见。

一般情况下,我会关注微软的Design Guidelines for Developing Class Libraries