Конфликты имен и свойств

При использовании класса, обладающего свойством 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 и т.д.?

Ответ 1

Нет конфликта. Фактически, . Руководство по стилю NET Framework поощряет вас делать это, например. если у вас есть класс, у которого есть одно свойство типа (независимо от того, перечислены ли или перечислены), вы должны называть его одинаковым. Типичным примером является свойство Color типа Color. Это хорошо, если только не существует двух цветов - в этом случае оба должны добавить что-то к имени (т.е. BackColor и ForeColor вместо Color и BackColor).

Ответ 2

Пока перечисление не вложено в MyDateClass, я не вижу в этом проблемы. Это далеко не редкость (по моему опыту), чтобы иметь свойство с тем же именем, что и возвращаемый им тип. Я посмотрю, смогу ли я найти некоторые примеры в рамках...

EDIT: Первый пример: DateTimeOffset.DateTime(не перечисление, но это несколько неуместно)