Шаг 189.
Язык программирования C#. Начала.
Перечисления и структуры. Знакомство с перечислениями

    На этом шаге мы перечислим особенности объявления и использования перечисления.

    Перечисление - это тип данных, определяемый пользователем. Переменная, объявленная как относящаяся к типу перечисления, может принимать значение одной из целочисленных констант. Список этих констант фактически детерминирует (определяет) перечисление как тип.


Другими словами, имеется набор целочисленных констант и переменная может принимать значение одной из этих констант. Набор констант формирует тип, к которому относится соответствующая переменная. Такой тип называется перечислением.

    Таким образом, определяя перечисление как тип данных, мы задаем набор значений, которые может принимать переменная, относящаяся к данному типу. Значения, входящие в набор, целочисленные (по умолчанию типа int), но каждое имеет свое уникальное имя (то есть является константой).

    Для использования перечисления в программе мы должны сначала описать тип перечисления. После того как тип определен, его можно использовать (в качестве типа переменных, например). Ниже приведен шаблон для объявления перечисления:

  enum имя (константа1, константа2, ..., константаN);

    Начинается все с ключевого слова enum. Оно является индикатором того, что объявляется именно перечисление. После ключевого слова enum указывают имя перечисления, которое фактически представляет собой название создаваемого типа. Именно имя перечисления используется как идентификатор типа данных при объявлении переменных. После имени перечисления в фигурных скобках через запятую перечисляются названия констант. Константы, формирующие тип перечисления, предварительно объявлять не нужно. То есть, когда мы в списке перечисляем названия констант, то тем самым мы их объявляем (и инициализируем). По умолчанию первая константа в списке получает значение 0, вторая константа в списке получает значение 1, и так далее: значение каждой следующей константы на единицу больше ее предшественницы. Допустим, в программе при объявлении перечисления использована следующая команда:

  enum Animals (Cat, Dog, Fox, Wolf, Bear);

    Этой командой определяется перечисление Animals. Впоследствии идентификатор Animals мы сможем использовать как обозначение для типа данных. Например, мы сможем объявить переменную, относящуюся к типу перечисления Animals:

  Animals animal;

    Объявленная таким образом переменная animal относится к типу Animals, и это означает, что значением переменной может быть одна из констант, формирующих тип Animals (имеются в виду константы Cat, Dog, Fox, Wolf и Bear). Напомним, что константы, формирующие перечисление, являются целочисленными. Их значения - целые числа. В данном случае значение первой в списке {Cat, Dog, Fox, Wolf, Bear} константы Cat равно 0, значение константы Dog равно 1, и так далее - последняя (пятая по счету) в списке константа Bear имеет значение 4. Константы из списка получают эти значения автоматически.

    Следует учесть, что константы из списка, определяющего перечисление, несколько отличаются от "обычных" констант, объявленных в индивидуальном порядке. Константы из списка перечисления используются с указанием имени перечисления. Ниже приведена команда, которой присваивается значение переменной animal:

  animal = Animals.Cat;

    Переменной animal присваивается значением константа Cat, причем ссылка на эту константу выполнена как Animals.Cat. То есть сначала указывается имя перечисления Animals и через точку - название константы Cat из этого перечисления. Это стандартный способ обращения к константам из перечисления: имени константы предшествует имя перечисления, и разделяются они точкой.


Хотя константы из перечисления технически реализуются как целочисленные значения, автоматического преобразования между целочисленными значениями и значениями типа перечисления нет. Обычно приходится выполнять явное приведение типов.

    Используемый по умолчанию для реализации значений из перечисления тип int можно заменить на другой целочисленный тип. Для этого идентификатор базового типа указывается через двоеточие после названия перечисления, как показано ниже:

  enum имя: тип {константа1, константа2, ..., константаN};
Например, для того чтобы базовым при реализации значений типа перечисления был тип byte, а не тип int, можем использовать такое объявление для перечисления Animals:
  enum Animals: byte {Cat, Dog, Fox, Wolf, Bear};

    Также мы можем явно инициализировать константы, формирующие перечисления. В таком случае после имени константы указывается оператор присваивания = и значение константы. Причем не обязательно явно указывать значение для всех констант перечисления. Разрешается указать значения только некоторых констант. В таком случае для констант, значение которых явно не указано, действует прежнее правило: значение очередной константы на единицу больше значения предыдущей константы. Допустим, перечисление объявлено с помощью такой команды:

  enum Animals: byte {Cat, Dog, Fox=100, Wolf, Bear=200};

    В этом случае константа Cat реализуется с целочисленным значением 0, константа Dog реализуется со значением 1, константа Fox реализуется со значением 100, значение константы Wolf равно 101, а значение константы Bear равно 200.

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг