Итак, я создаю игру в XNA, С# 4.0, и мне нужно управлять множеством PowerUps (которые в коде все наследуются от класса "PowerUp" ), а также для управления внутренним управлением PowerUps я в настоящее время имеет enum, PowerupEffectType, со значением для каждого дочернего класса PowerUp. В конце концов, в коде мне нужно сделать преобразования из PowerupEffectType в тип Powerup (класса Type
, достигнутого обычно с помощью typeof([class name])
).
Так как это групповой проект, я хочу жениться на каждом значении PowerupEffectType на его соответствующий тип класса, а также, возможно: т.е. не просто ожидать, что мои другие программисты будут использовать операторы switch для выполнения преобразования вручную, и убедитесь, что дополнения/расширения в дальнейшем предполагают как можно меньше изменений в максимально возможном количестве мест. У меня есть несколько вариантов этого, и лучшее, что я обнаружил до сих пор, это создание псевдо-методов enum, которые конденсируют все до одного оператора switch (99% от того, что я хочу), благодаря некоторым советам, которые я нашел здесь: http://msdn.microsoft.com/en-us/library/bb383974.aspx
Но я пытаюсь сделать это еще на один шаг - могу сохранить Type
в enum
? Я знаю, что вы можете сохранить перечисления как определенный тип (ссылка: http://msdn.microsoft.com/en-us/library/cc138362.aspx), но Type
не является одним из них. Текущими выборами являются байт, sbyte, short, ushort, int, uint, long и ulong. Есть ли возможный способ сохранить преобразование a 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% завершена?
Спасибо заранее!