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.?
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
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
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