Расширение определения перечисления в дочернем классе в .NET - PullRequest
2 голосов
/ 04 января 2010

У меня есть базовый класс, который должен определить перечисление:

BaseClass - SomeEnum

Затем мне нужно создать два производных класса из базового класса и расширить значения перечисления:

ChildClass1: BaseClass - SomeEnum - SomeEnumValue1

ChildClass2: BaseClass - SomeEnum - SomeEnumValue2

В C # или VB.NET кто-то может предоставить синтаксис для этого? Или, если это невозможно, предложить альтернативу тому, что я пытаюсь сделать? Спасибо!

Ответы [ 3 ]

8 голосов
/ 04 января 2010

Расширение списка значений в перечислении невозможно. Перечисления являются статическими в точке их объявления и компиляции.

Ваша альтернатива - прекратить использование перечислений и заменить их другим типом данных или иерархией классов.

0 голосов
/ 04 января 2010

Другие указали, что это невозможно. Я буду полагаться на них по специфике языка. Этот ответ больше "что делать, так как он не работает".

Очевидно, что ваши параметры зависят от вашего приложения. Чаще всего я видел перечисления, чтобы дать имя и область имен для произвольного целочисленного значения (в отличие от использования макросов). Если вы используете это, вы можете использовать альтернативный вариант создания словаря (или пары словарей), чтобы поддерживать индексы для этих имен и значений. В вашем базовом классе вы должны заполнить его значениями по умолчанию. В дочерних классах вы добавляете к нему таким же образом. В классах внуков, вы добавляете к нему так же. в классах правнуков вы добавляете ....

Издержки такой системы должны быть минимальными, поскольку вы просто хэшируете относительно короткие строки в качестве имен в дополнение к целым числам. Вы получаете удар во время выполнения по сравнению с использованием скомпилированного сравнения значений int, но поиск должен быть незначительным, если вы не работаете в режиме реального времени (маловероятно, если C # - ваш язык) или в корпоративной системе.

0 голосов
/ 04 января 2010

Лучшим вариантом будет сделать:

public class ChildClass1
{
  new public NewEnumValueList SomeEnum
  {
    ..
  }
}

Если это новое свойство возвращает полностью новый список значений перечисления или, как уже упоминалось, используйте шаблон состояния.

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