我最近开始使用ReSharper,这是一个很棒的工具。
今天我发现了一个关于静态字段命名规则的规定,即在前面加下划线作为前缀,例如:
private static string _myString;
- 这是否真的是命名静态变量的标准方式?如果是,那么这只是个人偏好和风格,还是有一些低级影响?例如编译JIT等。
- 这种风格起源于何处?我一直将其与C++相关联,这正确吗?
我最近开始使用ReSharper,这是一个很棒的工具。
今天我发现了一个关于静态字段命名规则的规定,即在前面加下划线作为前缀,例如:
private static string _myString;
微软的指南没有提及私有字段,它们只关注公开可见的成员。
常见的惯例是使用驼峰式命名法、_驼峰式命名法,甚至有时还保留了来自 C++/MFC 的 m_camelCase 风格。
如果您在不加前缀的情况下使用驼峰式命名法,则属性支持字段与属性名称仅在大小写方面不同,在 C# 中这并不是问题,但在 VB.NET 这样的大小写不敏感的语言中无法正常工作。
因此,很多人,包括我自己,喜欢使用下划线前缀,以便在所有语言中都可以使用相同的标准。根据我的经验,下划线比 m_ 更常用。
根据MSDN的说法,对于静态字段应使用Pascal Case。每当看到MSDN和StyleCop相互矛盾时,我总是会笑出声来 :)
因此,如果您遵循MSDN标准,则正确的方法是:
private static string MyString;
MyString
值的公共静态属性应该被命名为什么? - O. R. Mapper根据StyleCop的规定(默认设置),大多数字段的正确命名方式(如下所述)是以小写字母开头。
SA1306: FieldNamesMustBeginWithLowerCaseLetter
... 字段和变量名称必须以小写字母开头,除非该字段为public或internal、const或非私有和只读。在这些情况下,字段应以大写字母开头。
2021年更新
根据微软2021年发布的C#编码规范,private static
变量应以s_
前缀开头,后跟驼峰命名法。因此,应该如下所示:
private static string s_myString;
s_ ...
与 private static
,使用 _...
与 private
。 - Ola Ström实际上,这是私有字段(无论是否静态)的风格(至少在ReSharper中)。
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;
}
}
StaticPersonCache
)作为命名规范,以明确它与实例变量的区别。这包括私有静态字段以及具有其他可见性修饰符的静态字段。TS_Random
)作为约定。再次强调,这种“偏离”常规的命名传达了其他开发人员可能无法在第一眼看到的非常重要的信息。因此,名称被用作一种警示标志。StaticX
、TS_X
和_x
更难出错。这里的其他答案有点令人困惑。
在字段名中使用PascalCasing。
字段命名指南适用于静态公共和受保护字段。
因此,示例将是:MyStaticVariable、ActiveUserCount等。
变量名没有明确的标准规则。C#编译器有允许和不允许的要求(例如不能以数字开头),但是编程语言风格规则通常由程序员/组织自行决定。ReSharper具有预定义的样式规则;然而,它们仅被设置为约定优于配置方法中的默认值,并且可以进行修改。
您可以查看这篇维基百科文章,了解驼峰命名法背后的历史。