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";
}

c#中常量类的命名约定:复数或单数

我会用复数形式:Tokens。这意味着静态类充当某种类型的项的集合(其运行时类型不是类的类型)。

另一方面,枚举的字段是枚举类型的实例。例如,TypeCode.String a TypeCode。如果说TypeCodes.StringTypeCodes,那就太奇怪了。 然而,在您的Tokens示例中,使用单数给我们Token.Foo,其中一个令牌,但它不是Token(它是string)。

(或者,如果使用复数类名,则Tokens.Foostring,而不是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);
    }
}