Недавно мне показалось, что следующее (выборка) перечисления...
enum Color
{
Red,
Green,
Yellow,
Blue
}
... может быть заменен, казалось бы, более безопасным по типу классам:
class Color
{
private Color() { }
public static readonly Color Red = new Color();
public static readonly Color Green = new Color();
public static readonly Color Yellow = new Color();
public static readonly Color Blue = new Color();
}
С "безопасным типом" я имею в виду, что следующий оператор будет работать, если Color
был перечислением, но не если Color
были указанным выше классом:
var nonsenseColor = (Color)17; // works if Color is an enum
Два вопроса:
1) Существует ли широко распространенное имя этого шаблона (заменяя перечислимое число классом типа)?
2) В каких случаях следует использовать перечисления и когда класс будет более подходящим?