[英]What is the C# static fields naming convention?
我最近开始使用 ReSharper,这是一个很棒的工具。 今天我遇到了 static 字段的命名规则,即用下划线作为前缀。
private static string _myString;
Microsoft 指南对私有字段保持沉默,它们只关注公开可见的成员。
常见的约定是camelCase、_camelCase,有时甚至是C++/MFC m_camelCase 的宿醉。
如果您使用不带前缀的驼峰命名法,则您的属性支持字段将与属性名称不同,仅在大小写的情况下,这在 C# 中不是问题,但在不区分大小写的语言(如 VB.NET)中将不起作用。
很多人,包括我自己,都喜欢使用下划线前缀,以便在所有语言中都可以使用相同的标准。 根据我的经验,下划线比 m_ 更常见。
根据MSDN ,对静态字段使用Pascal Case 。 当 MSDN 和 StyleCop 相互矛盾时,我总是轻笑:)。
因此,如果您遵循 MSDN 标准,正确的方法是:
private static string MyString;
根据 StyleCop (并使用默认设置),命名大多数字段(如下所述)的正确方法是在开头使用小写字母。
SA1306:字段名称必须BeginWithLowerCaseLetter
... 字段和变量名称必须以小写字母开头,除非该字段是公共或内部、常量或非私有和只读的。 在这些情况下,该字段应以大写字母开头。
它实际上是私有字段的样式,无论是否静态。 (至少在 ReSharper 中)
约定是您公司的编码标准所说的。
我对 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;
}
}
2021 年更新
根据Microsoft 2021 年发布的 C# 编码约定, private static
变量应以s_
前缀开头,后跟驼峰式大小写。 所以,它应该如下所示:
private static string s_myString;
对于静态字段,我选择了 StaticPascalCase(例如StaticPersonCache
),因为它清楚地将它与实例变量区分开来。 这包括私有静态字段以及具有其他可见性修饰符的静态字段。
对于静态变量,我不太关心通过名称指示公共/私有可见性,而不是指示变量如何在实例之间运行。 此外,由于没有(实际上不应该有)许多静态变量,因此不经常应用“类似匈牙利语”的修饰符。
同样,对于线程静态变量([ThreadStatic] 或 ThreadLocal),我使用的约定是 TS_UpperCamelCase(例如TS_Random
)。 再一次,这种对规范的“破坏”传达了其他开发人员乍一看可能看不到的非常重要的信息。 因此,该名称在某种程度上被用作警示标志。
我使用 ReSharper 并相应地调整了警告/提示; 大多数其他命名约定保留在 ReSharper 默认设置中。
我为静态/线程静态字段选择这种“非标准”约定(注意:Microsoft 在 .NET 库中的某些代码中使用 TS_)是因为我遇到了多个“怪癖”,因为静态/ ThreadStatic/Instance 变量:使用StaticX
、 TS_X
和_x
很难做到这一点。
变量名称没有明确的标准规则。 对于允许的和不允许的(例如不能以数字开头)有 C# 编译器要求,但编程语言风格规则通常由程序员/组织决定。 ReSharper 具有预定义的样式规则; 然而,它们只是在约定优于配置方法中设置为默认值并且是可修改的。
您可以查看这篇 Wikipedia 文章,了解Camel Casing背后的历史。
这里的其他答案有点令人困惑。
从.NET 标准:
务必在字段名称中使用 PascalCasing。
字段命名准则适用于静态公共和受保护字段。
例如:MyStaticVariable、ActiveUserCount 等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.