c#中常量类的命名约定:复数或单数
本文关键字:单数 命名约定 常量 | 更新日期: 2023-09-27 18:13:13
对于枚举的指导方针是明确的…
除非枚举的值是位字段,否则必须使用单数名称。
(来源: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";
}
我会用复数形式:Tokens
。这意味着静态类充当某种类型的项的集合(其运行时类型不是类的类型)。
TypeCode.String
为 a TypeCode
。如果说TypeCodes.String
是TypeCodes
,那就太奇怪了。
然而,在您的Tokens
示例中,使用单数给我们Token.Foo
,其中是一个令牌,但它不是Token
(它是string
)。
(或者,如果使用复数类名,则Tokens.Foo
是string
,而不是Tokens
。Ack !)
由于两者的使用方式基本相同,并且在概念上是相同的,因此我建议您只遵循enum指导原则。
我没有任何官方的命名标准可以链接,但是我可以告诉你我会怎么做。
我会使用复数名称:Tokens
我会使用复数名称: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);
}
}