C#中常量类的命名约定:复数还是单数?

时间:2011-11-01 00:33:27

标签: c# coding-style naming-conventions

指南清楚明确......

  

对枚举使用单数名称,除非其值为位字段。

(资料来源: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";
}

4 个答案:

答案 0 :(得分:24)

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

另一方面,枚举的字段是枚举类型的实例。例如,TypeCode.String TypeCode。说TypeCodes.StringTypeCodes

是很奇怪的

但是,在您的Tokens示例中,使用单数形式为我们提供了Token.Foo,其中 是一个令牌,但它不是Token(它是一个string)。

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