什么是C#静态字段命名约定?

时间:2010-06-18 16:21:50

标签: c# .net variables coding-style

我最近开始使用ReSharper这是一个很棒的工具。今天我遇到了静态字段的命名规则,即用下划线加前缀ie。

private static string _myString;
  1. 这真的是命名静态变量的标准方法吗?如果是这样只是个人偏好和风格,还是会产生某种程度较低的影响?例如编译JIT等?
  2. 这种风格来自哪里?我一直把它与C ++联系起来,这是正确的吗?

9 个答案:

答案 0 :(得分:24)

Microsoft指南对私有字段保持沉默,它们只关注公开可见的成员。

常见的约定是camelCase,_camelCase,有时甚至是来自C ++ / MFC m_camelCase的宿醉。

如果你使用没有前缀的camelCase,你的属性支持字段将与属性名称不同,以防万一,这在C#中不是问题,但不适用于像VB.NET这样的不区分大小写的语言。 / p>

很多人,包括我自己,都喜欢使用下划线前缀,以便可以在所有语言中使用相同的标准。根据我的经验,下划线比m _更常见。

答案 1 :(得分:20)

根据MSDN,使用Pascal Case表示静态字段。当MSDN和StyleCop相互矛盾时,我总是轻笑:)。

因此,如果您遵循MSDN标准,正确的方法是:

private static string MyString;

答案 2 :(得分:13)

According to StyleCop(使用默认设置),命名大多数字段的正确方法(如下所示)在开头使用小写字母。

  

SA1306:FieldNamesMustBeginWithLowerCaseLetter

     

...字段和变量名称必须以小写字母开头,除非该字段是public或internal,const或非private和readonly。在这些情况下,字段应以大写字母开头。

另见SA1309: FieldNamesMustNotBeginWithUnderscore

答案 3 :(得分:11)

它实际上是私有字段的样式,静态与否。 (至少在ReSharper中)

答案 4 :(得分:4)

该惯例是贵公司的编码标准所说的。

答案 5 :(得分:3)

我对MSDN指南(使用Pascal案例)的问题是,它导致私有静态变量和公共(非静态)属性之间没有区别。静态属性也会出现同样的问题 - 静态和非静态之间没有区别。

也许这是故意的?

其中一种方法是使用相同的静力学标准和非静力学标准,但总是通过在类名前加上限定静态的使用。输入可能是一些额外的字符,但它使代码更具可读性。例如:

public class Employee
{
    private static Int32 thresholdPercentage = 5;
    public static String TooMuchMessage = "Unacceptable pay rise - sorry!";

    private Decimal _salary = 0.0m;

    public void RaiseSalary(Int32 raiseAmountPercentage)  
    {
        if (raiseAmountPercentage > Employee.thresholdPercentage)
            throw new ApplicationException(Employee.TooMuchMessage);

        _salary *= 1 + (raiseAmountPercentage / 100);

        return;
    }
}

答案 6 :(得分:1)

对于静态字段,我已经确定了StaticPascalCase(例如StaticPersonCache),因为它明确地将它与实例变量区分开来。这包括私有静态字段以及带有其他可见性修饰符的静态字段。

对于静态变量,通过名称指示公共/私有可见性比指示变量如何在实例之间运行更少关注。此外,由于没有(并且实际上不应该)许多静态变量,类似于Hugarian的'修饰符不经常应用。

类似地,对于线程静态变量([ThreadStatic]或ThreadLocal),我使用的约定是TS_UpperCamelCase(例如TS_Random)。再一次,这个"休息"来自规范传达了其他开发人员乍看之下可能看不到的非常重要的信息。因此,该名称被用作各种警示标志。

我使用ReSharper并相应地调整了警告/提示;大多数其他命名约定保留在ReSharper默认设置中。

我选择了这样的"非标准" 静态/线程静态字段的约定(注意:Microsoft在.NET库中的某些代码中使用TS_)是因为我遇到了多个“quirk”#39;由于错误识别Static / ThreadStatic / Instance变量:StaticXTS_X_x更难以理解。

答案 7 :(得分:0)

1 - 变量名称没有明确的标准规则。对于允许的内容和不允许的内容(即,不能以数字开头)有C#编译器要求,但编程语言样式规则通常由程序员/组织负责。 ReSharper有预定义的样式规则;但是,它们只是在约定优于配置方法中设置为默认值,并且可以修改。

2 - 您可以查看此维基百科文章,了解Camel Casing背后的历史记录。

答案 8 :(得分:0)

这里的其他答案有点令人困惑。

来自.NET standard

  

在字段名称中使用PascalCasing。
  字段命名准则适用于静态的公共字段和受保护的字段。

因此示例将为:MyStaticVariable,ActiveUserCount等。