2011-11-01 10 views
15

Las directrices son claras para las enumeraciones ...Convención de nomenclatura para la clase de constantes en C#: ¿plural o singular?

usa una singular nombre de una enumeración, a menos que sus valores son campos de bits.

(Fuente: http://msdn.microsoft.com/en-us/library/ms229040.aspx)

... pero no está tan claro para una clase de constantes (o de sólo lectura campos/propertes estáticas). Por ejemplo, ¿el nombre de esta clase debe ser singular o plural?

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

Considere esto, si estuviera creando una clase para contener métodos de extensión, ¿le daría un nombre singular o plural? También piense en los otros métodos que simplemente contienen referencias a valores/instancias específicos. por ejemplo, 'Colores'. –

+4

Por lo que vale, Windows parece usar el plural: [System.Windows.Media.Brushes] (http://msdn.microsoft.com/en-us/library/system.windows.media.brushes.aspx) , [System.Windows.Media.Colors] (http://msdn.microsoft.com/en-us/library/system.windows.media.colors.aspx). –

+1

@RaymondChen no siempre; por ejemplo 'System.Drawing.Color' toma el enfoque opuesto. - parece que a veces las clases de WPF hacen cosas raras con el nombramiento. – BrainSlugs83

Respuesta

22

Yo usaría el plural: Tokens. Esto implica que la clase estática sirve como una colección de elementos de algún tipo (cuyos tipos de tiempo de ejecución no son los de la clase).

Por otro lado, los campos de una enumeración son instancias de la enumeración tipo. Por ejemplo, TypeCode.Stringes a TypeCode. Sería extraño decir que TypeCodes.String es un TypeCodes.

Sin embargo, en su ejemplo Tokens, utilizando el singular nos da Token.Foo, que es una ficha, pero no es un Token (que es una string).

(o, si se utiliza el nombre de la clase plural, Tokens.Foo es una string, no un Tokens Ack.!)

+1

+1. Me gusta tu razonamiento – devuxer

+1

+1. Me gusta el mismo enfoque de sentido común para la situación. Al nombrar algo, me aseguro de que sea fácil de usar y de usar en la conversación, ya que hay una buena posibilidad de que en un momento u otro sea necesario comunicarlo a otro desarrollador. Si bien hay "normas" en el lugar en la forma en que nombramos las cosas, siempre hay circunstancias excepcionales que pueden dictar una desviación de la norma. –

1

No tengo ningún estándar de nombres oficial para enlazar, pero puedo decirles lo que haría.

me gustaría utilizar el nombre en plural: fichas

+0

Debo notar que a menudo también rompo la pauta de nombres para enums y los nombro en plural. Simplemente se siente más natural para mí. –

6

Dado que ambos se utilizan esencialmente la misma manera, y son conceptualmente lo mismo, me gustaría recomendar simplemente siguiendo las directrices de enumeración.

+1

+1 para el nombre singular. En mi opinión, el plural tiene sentido cuando escribe la clase estática (este es un contenedor con Tokens Foo, Bar, etc.), mientras que el singular tiene sentido cuando se usa la clase estática (Hacer algo con Token Foo). Dado que el segundo caso (con un token) debe superar por mucho al primer caso (definir tokens), el singular es más apropiado. –

0

me gustaría utilizar el nombre en plural: Tokens

No obstante, puede considerar la creación de un Token clase para mantener el valor de const.

Esto sería similar a System.Windows.Media.Colors donde, por ejemplo, Colors.Blue devuelve una instancia de 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); 
    } 
} 
Cuestiones relacionadas