C# 中常量类的命名约定:复数还是单数?
Posted
技术标签:
【中文标题】C# 中常量类的命名约定:复数还是单数?【英文标题】:Naming convention for class of constants in C#: plural or singular? 【发布时间】:2011-11-01 00:33:27 【问题描述】:列举的指南很明确...
对枚举使用单数名称,除非它的值是位域。
(来源:http://msdn.microsoft.com/en-us/library/ms229040.aspx)
...但对于一类常量(或只读静态字段/属性)不是很清楚。例如,这个类的名称应该是单数还是复数?
public static class Token // or Tokens?
public const string Foo = "Foo";
public const string Bar = "Bar";
public const string Doo = "Doo";
public const string Hicky = "Hicky";
【问题讨论】:
考虑一下,如果你正在创建一个类来保存扩展方法,你会给它一个单数还是复数名称?还要考虑其他仅包含对特定值/实例的引用的方法。例如,Colors
.
不管怎样,Windows 本身似乎使用复数形式:System.Windows.Media.Brushes、System.Windows.Media.Colors。
@RaymondChen 并非总是如此;例如System.Drawing.Color
采取相反的方法。 -- 似乎 WPF 类有时会在命名方面做一些奇怪的事情。
@RaymondChen 还要考虑 System.Windows.Media.DashStyle 与 System.Windows.Media.DashStyles。在这里,后者是前者的预定义集合。
【参考方案1】:
我会使用复数形式:Tokens
。这意味着静态类充当某种项目的集合(其运行时类型不是类的类型)。
另一方面,枚举的字段是枚举类型的实例。例如,TypeCode.String
是 TypeCode
。说TypeCodes.String
是TypeCodes
会很奇怪。
但是,在您的Tokens
示例中,使用单数会得到Token.Foo
,它是一个标记,但它不是Token
(它是string
)。
(或者,如果您使用复数类名,Tokens.Foo
是 string
,而不是 Tokens
。Ack!)
【讨论】:
+1。我喜欢对这种情况采用同样的常识性方法。在命名任何东西时,我会确保它在对话中是可发音和可用的,因为很有可能在某一时刻,它可能需要传达给另一位开发人员。虽然我们命名事物的方式有“标准”,但总有一些特殊情况可能会导致偏离规范。【参考方案2】:由于两者的使用方式基本相同,并且在概念上是相同的东西,我建议只遵循枚举指南。
【讨论】:
+1 表示单数名称。恕我直言,在编写静态类时复数是有意义的(这是一个带有 Token Foo、Bar 等的容器),而在使用静态类时单数是有意义的(用 Token Foo 做一些事情)。因为第二种情况(使用标记)应该远远超过第一种情况(定义标记),所以单数更合适。【参考方案3】:我没有任何官方命名标准可以链接,但我可以告诉你我会做什么。
我会使用复数名称:Tokens
【讨论】:
我应该注意,我也经常打破枚举的命名准则并将它们命名为复数。这对我来说感觉更自然。【参考方案4】:我会使用复数名称:Tokens
但是,您可以考虑创建一个 Token
类来保存 const 值。
这类似于System.Windows.Media.Colors
,例如Colors.Blue
返回一个 System.Windows.Media.Color
实例。
public class Token
public Token(string value)
Value = value;
public string Value get; private set;
public static implicit operator string(Token token)
return token == null ? null : token.Value;
public bool Equals(string value)
return String.Equals(Value, value);
public override bool Equals(object obj)
var other = obj as Token;
if (other == null)
return false;
return Equals(other.Value);
public override int GetHashCode()
return Value.GetHashCode();
public override string ToString()
return Value;
public static class Tokens
public static readonly Token Foo = new Token("Foo");
class Program
static void Main(string[] args)
// You can use it as if they were string constants.
string token = Tokens.Foo;
bool areEquals = String.Equals(token, Tokens.Foo);
【讨论】:
以上是关于C# 中常量类的命名约定:复数还是单数?的主要内容,如果未能解决你的问题,请参考以下文章
java编程中,写一个工具类,命名时使用单数util还是使用复数utils好呢?
命名局部常量:UpperCamelCase 还是 lowerCamelCase?