c # переопределение enum - PullRequest
       7

c # переопределение enum

1 голос
/ 13 октября 2011

Я знаю, что, возможно, этот вопрос уже задавался ранее, но я не могу найти правильного решения (имея в виду, что я не эксперт по C #, а пользователь среднего уровня) ...

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

Если я определю enum в своих дочерних классах как "public new enum ...", я могу его "унаследовать" .. верно?Более того, что интересно, у меня есть словарь в базовом классе, и я пытаюсь передать его от ребенка (т.е. солдата или птицы) к его базовому (анимированному) классу ... Но я не могу ..

Я чувствую, что делаю что-то не так или отсутствует ... Есть идеи?

Ответы [ 3 ]

3 голосов
/ 13 октября 2011

Ну, вы не можете сделать это напрямую с перечислениями в C #.

Я бы предложил использовать более объектно-ориентированный подход и заменить перечисления реальными объектами. Таким образом, вы определяете интерфейс IAnimationState в своем базовом классе, а также добавляете абстрактный метод getAnimationState(). В классах экранных объектов вы просто реализуете этот метод, возвращая некоторую конкретную реализацию интерфейса IAnimationState. Таким образом, вы можете поместить некоторую логику в небольшие классы состояний анимации, делая ваш проект более модульным.

2 голосов
/ 13 октября 2011

Вы не можете расширять перечисления.Вы можете создавать новые перечисления в производных классах, но они различны.

Я думаю, что вы должны просто использовать константы int.

0 голосов
/ 13 октября 2011

Перечислимый тип представляет простой набор значений. Вот и все. Вы пытаетесь использовать перечисление в качестве типа класса, когда оно просто не соответствует требованиям.

Просто создайте перечисление (если вам действительно нужно) и создайте «настоящий» тип для сложных операций.

enum SomeEnum { Foo, Bar }

class Whatever
{
    public SomeEnum { get { return SomeEnum.Foo; } }
}

Этот вопрос является хорошим примером разработки решения без реального понимания проблемы. Вместо того, чтобы предлагать свое решение и просить нас выяснить последние 20%, которые не имеют никакого смысла, сообщите нам что вы на самом деле пытаетесь достичь. У кого-то здесь может быть лучший подход, о котором вы даже не подумали.

...