При использовании класса, обладающего свойством enum, обычно возникает конфликт имен между именем свойства и типом перечисления. Пример:
enum Day{ Monday, Tuesday, ... }
class MyDateClass
{
private Day day;
public Day Day{ get{ return day; } }
}
Так как только перечисления флагов должны иметь множественные имена, именование перечисления "Дни" не является способом перехода на перечисление не-флага. В приведенном выше примере вы можете использовать некоторые варианты, такие как "WeekDay" для перечисления или свойства. Но в общем случае таких хороших вариантов нет, поэтому вы получаете такие свойства, как "FooMode" или "BarKind" для объекта с свойствами enum типа Foo и Bar. Не очень элегантный.
Как обычно вы указываете перечисления и свойства в этом сценарии?
Спасибо за быстрые ответы. Другой вопрос: почему не рекомендуется встраивать публичные перечисления и как вы решаете проблемы с именами, если хотите встраивать публичные перечисления?
class Vehicle
{
enum Kind{ Car, Bike }
public Kind Kind{ get{ return ... } }
}
class Meal
{
enum Kind{ Dessert, MainCourse }
public Kind Kind{ get{ return ... } }
}
В приведенном выше сценарии, учитывая, что Meal и Vehicle используют одно и то же пространство имен, я не могу перемещать "Kind" за пределы любого из классов без переименования MealKind и VehicleKind соответственно. Мне нравится внешний вид
myVehicle.Kind = Vehicle.Kind.Car
Но это не то, что рекомендуют рекомендации. Какая была бы лучшая практика здесь? Никогда не использовать вложенные публичные перечисления и вместо этого называть их VehicleKind и т.д.?