Для каждой последующей символически обозначаемой константы в перечислении задается целое значение, которое на единицу больше, чем у предыдущей константы. По умолчанию значение первой символически обозначаемой константы в перечислении равно нулю. Следовательно, в приведенном выше примере перечисления Appleконстанта Jonathanравна нулю, константа GoldenDel— 1, константа RedDel— 2 и т.д.
Доступ к членам перечисления осуществляется по имени их типа, после которого следует оператор-точка. Например, при выполнении фрагмента кода
Console.WriteLine(Apple.RedDel + " имеет значение " +
(int)Apple.RedDel) ;
выводится следующий результат.
RedDel имеет значение 2
Как показывает результат выполнения приведенного выше фрагмента кода, для вывода перечислимого значения используется его имя. Но для получения этого значения требуется предварительно привести его к типу int.
Ниже приведен пример программы, демонстрирующий применение перечисления Apple.
// Продемонстрировать применение перечисления.
using System;
class EnumDemo {
enum Apple { Jonathan, GoldenDel, RedDel, Winesap,
Cortland, McIntosh };
static void Main() {
string[] color = {
"красный",
"желтый",
"красный",
"красный",
"красный",
"красновато-зеленый"
};
Apple i; // объявить переменную перечислимого типа
// Использовать переменную i для циклического
// обращения к членам перечисления.
for(i = Apple.Jonathan; i <= Apple.McIntosh; i++)
Console.WriteLine(i + " имеет значение " + (int)i);
Console.WriteLine();
// Использовать перечисление для индексирования массива.
for(i = Apple.Jonathan; i <= Apple.McIntosh; i++)
Console.WriteLine("Цвет сорта " + i + " — " + color[ (int)i]);
}
}
Ниже приведен результат выполнения этой программы.
Jonathan имеет значение 0
GoldenDel имеет значение 1
RedDel имеет значение 2
Winsap имеет- значение 3
Cortland имеет значение 4
McIntosh имеет значение 5
Цвет сорта Jonathan - красный
Цвет сорта GoldenDel - желтый
Цвет сорта RedDel - красный
Цвет сорта Winsap - красный
Цвет сорта Cortland - красный
Цвет сорта McIntosh - красновато-зеленый
Обратите внимание на то, как переменная типа Appleуправляёт циклами for. Значения символически обозначаемых констант в перечислении Appleначинаются с нуля, поэтому их можно использовать для индексирования массива, чтобы получить цвет каждого сорта яблок. Обратите также внимание на необходимость производить приведение типов, когда перечислимое значение используется для индексирования массива. Как упоминалось выше, в C# не предусмотрены неявные преобразования перечислимых типов в целочисленные и обратно, поэтому для этой цели требуется явное приведение типов.
И еще одно замечание: все перечисления неявно наследуют от класса System.Enum, который наследует от класса System.ValueType, а тот, в свою очередь, — от класса object.
Инициализация перечисления
Значение одной или нескольких символически обозначаемых констант в перечислении можно задать с помощью инициализатора. Для этого достаточно указать после символического обозначения отдельной константы знак равенства и целое значение. Каждой последующей константе присваивается значение, которое на единицу больше значения предыдущей инициализированной константы. Например, в приведенном ниже фрагменте кода константе RedDelприсваивается значение 10.
enum Apple { Jonathan, GoldenDel, RedDel = 10, Winesap,
Cortland, McIntosh };
В итоге все константы в перечислении принимают приведенные ниже значения.
Jonathan 0
GoldenDel 1
RedDel 10
Winesap 11
Cortland 12
McIntosh 13
Указание базового типа перечисления
По умолчанию в качестве базового для перечислений выбирается тип int, тем не менее перечисление может быть создано любого целочисленного типа, за исключением char. Для того чтобы указать другой тип, кроме int, достаточно поместить этот тип после имени перечисления, отделив его двоеточием. В качестве примера ниже задается тип byteдля перечисления Apple.
Читать дальше