Недоиспользуемый (но вполне допустимый) метод заключается в использовании класса, который определяет набор констант. Как класс, вы можете добавить дополнительные свойства, которые могут описывать другие аспекты перечисляемого значения. Любопытно, что именно так большинство перечислений реализовано в Java (для них нет специального ключевого слова).
Если вы идете по этому пути, обычно рекомендуется сделать класс запечатанным и определить личный конструктор, чтобы только сам класс мог определять экземпляры. Вот пример:
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...
}
Использование такого перечисления приводит к более элегантному и простому синтаксису, чем атрибуты:
if( PlayerPosition.Quarterback.IsDefensive )
{
// ...
}