Enum и конфликты именования свойств - PullRequest
42 голосов
/ 17 октября 2008

При использовании класса, обладающего свойством enum, обычно возникает конфликт имен между именем свойства и типом enum. Пример:

enum Day{ Monday, Tuesday, ... }

class MyDateClass
{
   private Day day;

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

Так как только перечисления флагов должны иметь множественные имена, присвоение имени перечислению «Дни» не является подходящим способом для перечисления без флага. В приведенном выше примере вы можете использовать некоторые варианты, такие как «WeekDay» для перечисления или свойства. Но в общем случае нет хороших вариантов, подобных этому, поэтому вы в конечном итоге используете такие свойства, как «FooMode» или «BarKind» для объекта со свойствами перечисления типа 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 и т. Д.?

Ответы [ 2 ]

33 голосов
/ 17 октября 2008

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

9 голосов
/ 17 октября 2008

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

РЕДАКТИРОВАТЬ: Первый пример: DateTimeOffset.DateTime (не перечисление, но это несколько не имеет значения)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...