Donc, je suis en train de créer un jeu avec XNA, C# 4.0, et je dois gérer beaucoup de Bonus (ce qui dans le code sont toutes héritées de la classe "mise sous tension"), et pour gérer le back-end de la gestion du Bonus j'ai actuellement un enum, PowerupEffectType, avec une valeur pour chaque enfant de la classe de mise sous tension. Finalement, dans le code que j'ai besoin de faire des conversions de PowerupEffectType à la mise sous tension de type (de la classe Type
, atteint généralement avec typeof([class name])
).
Puisque c'est un projet de groupe, je veux épouser chaque valeur de PowerupEffectType correspondant à son Type de classe aussi bien que possible, c'est à dire: ne Pas s'attendre mes autres programmeurs à utiliser les instructions switch pour faire la conversion manuellement, et de faire assurer les ajouts/extensions ultérieures comportent que peu de changements en peu d'endroits que possible. J'ai quelques options pour cela, et le meilleur que j'ai découvert à ce jour est la création d'enum pseudo-méthodes de condenser tout vers le bas à une seule instruction switch (99% de ce que je veux), grâce à quelques conseils que j'ai trouvé ici: http://msdn.microsoft.com/en-us/library/bb383974.aspx
Mais je suis en train de prendre une nouvelle étape - puis-je enregistrer un Type
en enum
? Je sais que vous pouvez enregistrer les énumérations comme un type spécifique (lien: http://msdn.microsoft.com/en-us/library/cc138362.aspx), mais Type
n'est pas l'un d'eux. Les choix actuels sont octet, sbyte, short, ushort, int, uint, long, et ulong. Est-il possible d'enregistrer un convertir Type
sur l'un de ces types de données et à l'arrière?
Juste pour être clair, c'est ce que je SOUHAITE que je pourrais faire, et je suis à la recherche d'un moyen de le faire:
// (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)
}
Est-il possible de le faire, ou je suis juste de compliquer à l'excès d'une solution à un problème qui est déjà 99%?
Merci à l'avance!