Un poco utilizado (pero perfectamente válida) la técnica es usar una clase que define un conjunto de constantes. Como clase, puede agregar propiedades adicionales que pueden describir otros aspectos del valor enumerado. Curiosamente, esta es la forma en que la mayoría de las enumeraciones se implementan en Java (que no tiene una palabra clave especial para ellas).
Si sigue esta ruta, generalmente es una buena idea sellar la clase y definir un constructor privado, de modo que solo la clase misma pueda definir instancias. He aquí un ejemplo:
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...
}
Utilizando los resultados de este tipo de una enumeración en la sintaxis más elegante y más simple que los atributos:
if(PlayerPosition.Quarterback.IsDefensive)
{
// ...
}
Es una pregunta interesante, incluso si se está tratando enumeraciones de abuso, tengo una pregunta a cambio ... ¿por qué no usar un jugador de clase con propiedades tanto para la posición y si están en el equipo defensivo u ofensivo? – Lazarus