2010-05-18 14 views
10

Me encuentro con esto con tanta frecuencia que pensé que vería lo que otros tenían que decir al respecto.¿Cuál es una buena convención de nombres para diferenciar un nombre de clase de una propiedad en C#?

Usando las convenciones de StyleCop, me parece que a menudo tengo un nombre de propiedad que es difícil de hacer diferente al nombre de clase al que está accediendo. Por ejemplo:

public class ProjectManager 
{ 
// Stuff here 
} 

public class OtherClass 
{ 
    private ProjectManager ProjectManager { get; set; } 
} 

Se compila y ejecuta, pero parece que sería una manera fácil de confundir las cosas, incluso con el uso de "este".

+9

El problema de Color de color. Si el mejor nombre para la propiedad * es * el nombre de la clase, ve con él. De lo contrario, podría adquirir el hábito de complicar innecesariamente su propiedad y/o los nombres de clase. –

+0

Estoy de acuerdo, me confunde también. esto. ProjectManager lo resuelve bastante bien. – kenny

+1

De hecho, este es el famoso problema de "Color de color". El lenguaje C# ha sido cuidadosamente diseñado para que pueda salirse con la suya con este patrón, pero sí causa algunos casos de esquina interesantes. Para un análisis de las consecuencias de estas reglas, consulte mi artículo: http://blogs.msdn.com/ericlippert/archive/2009/07/06/color-color.aspx –

Respuesta

11

Este es en realidad un patrón muy común en la programación .Net. Particularmente con los tipos y los miembros de enum, ya que es la forma de programación recomendada por .Net Design Guidelines. Referencia

4.0 directrices de diseño

Si bien puede ser un poco confuso, no es una vez que lo ha visto un par de veces. Las herramientas son compatibles con este patrón y dado que uno es un tipo y el otro una instancia es difícil invertirlos accidentalmente sin causar un error de compilación.

+0

Jared, ¿podría publicar la versión actual de ese enlace? Cuando se publican los enlaces de .NET 1.1, algunas personas terminan siguiendo más enlaces, sin darse cuenta de que están en el mundo de .NET 1.1. –

+0

@John, ni siquiera se dio cuenta de que había vinculado a las versiones 1.1. Gracias por atrapar eso. Actualizado para las pautas 4.0 – JaredPar

+0

necesitamos que su empresa actualice a .NET 3.5 o .NET 2.0 en el peor. :-) –

4

Esa es una convención de nomenclatura típica cuando solo habrá una sola propiedad de tipo ProjectManager dentro de cualquier clase dada. Deja de ser confuso porque no hay otros usos del tipo ProjectManager.

Por supuesto, si hay otros usos, entonces necesita diferentes nombres.

1

Acepto las otras respuestas. Para completar, a veces encuentro una manera de generalizar el nombre de clase un poco más. Tengo entendido que su ejemplo fue sólo un ejemplo, pero una forma de hacerlo sería:

public class Person 
{ 
    // Stuff here 
} 

public class OtherClass 
{ 
    private Person ProjectManager { get; set; } 
} 

Esto ayuda a que sea un poco más fácil de leer. Pero es perfectamente aceptable (e incluso alentado) tener el mismo nombre y propiedad de clase.

Cuestiones relacionadas