c# - switch - Enum y conflictos de nombres de propiedad
enum to list c# (2)
No hay conflicto De hecho, la guía de estilo de .NET Framework lo alienta a hacer esto , por ejemplo, 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).
Cuando se usa 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:
enum Day{ Monday, Tuesday, ... }
class MyDateClass
{
private Day day;
public Day Day{ get{ return day; } }
}
Como solo las enumeraciones de banderas deben tener nombres en plural, nombrar a la enum "Días" no es el camino a seguir para una enumeración no de bandera. 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 rápidas respuestas. 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 Meal and Vehicle comparten el mismo espacio de nombres, no puedo mover "Kind" fuera de ninguna de las clases sin cambiar el nombre de MealKind y 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.?
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. Veré si puedo encontrar algunos ejemplos en el marco ...
EDITAR: Primer ejemplo: DateTimeOffset.DateTime (no es una enumeración, pero eso es algo irrelevante)