指南清楚明确......
对枚举使用单数名称,除非其值为位字段。
(资料来源: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";
}
答案 0 :(得分:24)
我会使用复数:Tokens
。这意味着静态类充当某种项的集合(其运行时类型不是该类的)。
另一方面,枚举的字段是枚举类型的实例。例如,TypeCode.String
是TypeCode
。说TypeCodes.String
是TypeCodes
。
但是,在您的Tokens
示例中,使用单数形式为我们提供了Token.Foo
,其中 是一个令牌,但它不是Token
(它是一个string
)。
(或者,如果您使用复数类名称,Tokens.Foo
是string
,而不是Tokens
。确认!)
答案 1 :(得分:6)
由于两者的使用方式基本相同,并且在概念上是相同的,我建议只遵循枚举指南。
答案 2 :(得分:1)
我没有任何官方命名标准可以链接到,但我可以告诉你我会做什么。
我会使用复数名称:Tokens
答案 3 :(得分:0)
我会使用复数名称: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);
}
}