Можно ли сохранить тип (используя «typeof()») в перечислении?

Итак, я создаю игру в XNA, C# 4.0, и мне нужно управлять множеством PowerUps (которые в коде все унаследованы от класса "PowerUp"), а также обрабатывать внутренние управление PowerUps В настоящее время у меня есть перечисление PowerupEffectType со значением для каждого дочернего класса PowerUp. В конечном итоге в коде мне нужно выполнить преобразования из PowerupEffectType в тип Powerup (класса Type, обычно достигаемый с помощью typeof([имя класса])).

Поскольку это групповой проект, я хочу как можно лучше сочетать каждое значение PowerupEffectType с соответствующим типом класса, то есть: не просто ожидать, что другие мои программисты будут использовать операторы switch для выполнения преобразования вручную, и убедиться, что дополнения /expansions позже включают как можно меньше изменений в как можно меньшем количестве мест. У меня есть несколько вариантов для этого, и лучшее, что я обнаружил до сих пор, — это создание псевдометодов enum, которые сжимают все до одного оператора switch (99% того, что я хочу), благодаря некоторым советам, которые я нашел здесь: http://msdn.microsoft.com/en-us/library/bb383974.aspx

Но я пытаюсь сделать еще один шаг — могу ли я сохранить тип в перечислении ?Я знаю, что вы можете сохранять перечисления как определенный тип (ссылка: http://msdn.microsoft.com/en-us/library/cc138362.aspx), но Typeне входит в их число. Текущие варианты: byte, sbyte, short, ushort, int, uint, long и ulong. Есть ли реальный способ сохранить преобразование Typeв любой из вышеуказанных типов данных и обратно?

Чтобы было ясно, вот что я ХОЧУ сделать, и я ищу способ сделать это:

// (Assuming 'LightningPowerup', 'FirePowerup', and 'WaterPowerup' are
// all declared classes that inherit from a single base class)

public enum PowerupEffectType
{
    LIGHTNING = typeof(LightningPowerup),
    FIRE = typeof(FirePowerup),
    WATER = typeof(WaterPowerup)
}

Есть ли способ сделать это, или я просто слишком усложняю решение проблемы, которая уже на 99% завершено?

Заранее спасибо!

61
задан user1306322 1 October 2013 в 10:35
поделиться