2008-10-17 13 views
37

Al usar una clase que tiene una propiedad enum, generalmente se genera un conflicto de nomenclatura entre el nombre de la propiedad y el tipo de enumeración. Ejemplo:Conflictos de nomenclatura de enumeración y propiedad

enum Day{ Monday, Tuesday, ... } 

class MyDateClass 
{ 
    private Day day; 

    public Day Day{ get{ return day; } } 
} 

Dado que sólo banderas enumeraciones deben tener nombres plurales, nombrando los "Días" de enumeración no es el camino a seguir para una enumeración no son del pabellón. En el ejemplo anterior, puede usar alguna variación como "WeekDay" para la enumeración o la propiedad. Pero, en el caso general, no existen buenas variaciones así, por lo que terminas usando propiedades como "FooMode" o "BarKind" para un objeto con propiedades enum de tipo Foo y Bar. No tan elegante.

¿Cómo se suelen nombrar enumeraciones y propiedades en este escenario?


Gracias por las respuestas rápidas. Otra pregunta: ¿por qué no se recomienda anidar enumeraciones públicas, y cómo se resuelven los problemas de nomenclatura si se quieren anidar en las enumeraciones públicas?

class Vehicle 
{ 
    enum Kind{ Car, Bike } 

    public Kind Kind{ get{ return ... } } 
} 

class Meal 
{ 
    enum Kind{ Dessert, MainCourse } 

    public Kind Kind{ get{ return ... } } 
} 

En el escenario anterior, dado que las comidas y compartir el mismo espacio de nombres del vehículo, no pueden moverse "tipo" fuera de cualquiera de las clases sin el cambio de nombre y MealKind VehicleKind respectivamente. Me gusta el aspecto de

myVehicle.Kind = Vehicle.Kind.Car 

Pero eso no es lo que recomiendan las directrices. ¿Cuál sería la mejor práctica aquí? ¿Nunca utilizar enumeraciones públicas anidadas y en su lugar nombrarlas VehicleKind, etc.?

+0

No funcionará en un escenario anidado. Entonces, claramente hay un choque de nombres. Ni siquiera creo que usar un alias 'usar' funcionará en este caso. – leppie

+1

Las enumeraciones anidadas hacen que el código sea más largo y están estrechamente vinculadas a la clase. Ah, y en su ejemplo, puede derivar Car y Bike de Vehicle and Dessert y MainCourse from Meal, así que no hay necesidad de una enumeración :) – OregonGhost

+0

Suponiendo que necesita el enum (es decir, el tipo debe usarse como un valor, no una subclase), ¿no es más agradable tener enumeraciones públicas anidadas que tener muchas enumeraciones prefijadas con el nombre de clase como VehicleKind? Por ejemplo, al cambiar el nombre de la clase, todas las enumeraciones que pertenecen solo a esa clase deben renombrarse ... – AndersF

Respuesta

8

Siempre que la enumeración no esté anidada dentro de MyDateClass, no veo que eso sea un problema. No es raro (en mi experiencia) tener una propiedad con el mismo nombre que el tipo que devuelve. Voy a ver si puedo encontrar algunos ejemplos en el marco ...

EDIT: Primer ejemplo: DateTimeOffset.DateTime (no una enumeración, pero eso es algo irrelevante)

+0

Es bastante común para las clases emitidas por el servicio web. – leppie

29

No hay conflicto. De hecho, el .NET Framework style guide encourages you to do this, p. si tiene una clase que tiene una sola propiedad de un tipo (no importa si es enum o clase), entonces debe darle el mismo nombre. El ejemplo típico es una propiedad Color de tipo Color. Está bien, a menos que haya dos colores; en ese caso, ambos deberían agregar algo al nombre (es decir, BackColor y ForeColor, en lugar de Color y BackColor).

+0

El ejemplo canónico de esto en mi mente es que DbCommand.CommandType es del tipo CommandType. –

+8

Tenga en cuenta que esto no funciona cuando la enumeración está anidada dentro del tipo que declara el campo enum, como se menciona en otras respuestas. – yoyo

Cuestiones relacionadas