Un sous-utilisé (mais parfaitement valide) technique est d'utiliser une classe qui définit un ensemble de constantes. En tant que classe, vous pouvez ajouter des propriétés supplémentaires pouvant décrire d'autres aspects de la valeur énumérée. Curieusement, c'est la façon dont la plupart des enums sont implémentés en Java (qui n'a pas de mot-clé spécial pour eux).
Si vous suivez cette route, c'est généralement une bonne idée de sceller la classe et de définir un constructeur privé, afin que seule la classe elle-même puisse définir des instances. Voici un exemple:
public static class Position
{
private PlayerPosition (string name, bool isDefensive) {
this.Name = name
this.IsDefensive = isDefensive ;
}
// any properties you may need...
public string Name { get; private set; }
public bool IsDefensive { get; private set; }
public bool IsOffensive { get { return !IsDefensive; } }
// static instances that act like an enum
public static readonly Quarterback = new PlayerPosition("Quarterback", false);
public static readonly Runningback = new PlayerPosition("Runningback", false);
public static readonly Linebacker = new PlayerPosition("Linebacker", true);
// etc...
}
En utilisant un tel résultat enum dans la syntaxe plus élégante et plus simple que les attributs:
if(PlayerPosition.Quarterback.IsDefensive)
{
// ...
}
Il est une question intéressante même si elle essaie énumérations d'abus, j'ai une question en retour ... pourquoi n'êtes-vous pas utiliser un lecteur de classe avec des propriétés pour la position et si elles sont sur l'équipe défensive ou offensive? – Lazarus