Así que estoy creando un juego en XNA, C# 4.0, y necesito administrar una gran cantidad de PowerUps (que en el código son todos heredados de la clase "PowerUp"), y manejar la administración de back-end de los PowerUps que actualmente tener un enum, PowerupEffectType, con un valor para cada clase secundaria de PowerUp. Eventualmente en el código necesito hacer conversiones de PowerupEffectType al tipo de Powerup (de la clase Type
, generalmente alcanzado con typeof([class name])
).¿Es posible guardar un Tipo (usando "typeof()") en una enumeración?
Como este es un proyecto grupal, quiero unir cada valor de PowerupEffectType a su clase correspondiente. Escriba lo mejor posible, es decir: no solo espero que mis otros programadores usen declaraciones switch para realizar la conversión manualmente y asegurarse adiciones/expansiones posteriores implican pocos cambios en el menor número posible de lugares. Tengo algunas opciones para esto, y lo mejor que he descubierto hasta ahora es crear enum pseudo-métodos que condensen todo en una única instrucción switch (99% de lo que quiero), gracias a algunos consejos que encontré aquí: http://msdn.microsoft.com/en-us/library/bb383974.aspx
Pero estoy tratando de llevarlo un paso más allá - ¿puedo guardar un Type
en un enum
? Sé que puede guardar enumeraciones como un tipo específico (enlace: http://msdn.microsoft.com/en-us/library/cc138362.aspx), pero Type
no es una de ellas. Las opciones actuales son byte, sbyte, short, ushort, int, uint, long y ulong. ¿Hay alguna manera factible de guardar una conversión a Type
en cualquiera de los tipos de datos anteriores y viceversa?
Para que quede claro, esto es lo que me gustaría poder hacer, y estoy buscando una manera de hacerlo:
// (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)
}
¿Hay alguna manera de hacer esto, o estoy simplemente ¿complicar demasiado una solución a un problema que ya está completado en un 99%?
¡Gracias de antemano!
no sé lo que estás tratando de lograr aquí como su objetivo final, pero huele a algo que deberías lograr con un método virtual en lugar de encender una enumeración. Normalmente, la razón por la que desea obtener un tipo de una enumeración como lo está haciendo es si la enumeración proviene de una fuente externa, probablemente la base de datos. Pero, en ese caso, probablemente desee que su bloque de conmutadores * ejemplifique * el tipo de encendido en lugar de darle el objeto de clase correspondiente. –