Перечисления

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

enum Menu { Read, Write, Append, Exit }

enum Радуга { Красный, Оранжевый, Желтый, Зеленый, Синий, Фиолетовый }

Для каждой константы задается ее символическое имя. По умолчанию констан­там присваиваются последовательные значения типа int, начиная с 0, но можно задать и собственные значения, например:

enum Nums { two = 2, three, four, ten = 10, eleven, fifty = ten + 40 };

Константам three и four присваиваются значения З и 4, константе eleven — 11. Имена перечисляемых констант внутри каждого перечисления должны быть уникальными, а значения могут совпадать.

Преимущество перечисления перед описанием именованных констант состоит в том, что связанные константы нагляднее; кроме того, компилятор выполняет проверку типов, а интегрированная среда разработки подсказывает возможные значения констант, выводя их список.

Синтаксис перечисления:

[ атрибуты ] [ спецификаторы ] enum имя_перечисления [: базовый_тип ] тело_перечисления [; ]

Спецификаторы перечисления имеют такой же смысл, как и для класса, причем Допускаются только спецификаторы new, public, protected, internal и private.

Базовый тип — это тип элементов, из которых построено перечисление. По умол­чанию используется тип int, но можно задать тип и явным образом, выбрав его среди целочисленных типов (кроме char), а именно: byte, sbyte, short, ushort, int, uint, long и ulong. Необходимость в этом возникает, когда значения констант не­возможно или неудобно представлять с помощью типа int.

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

Перечисления часто используются как вложенные типы, идентифицируя значе­ния из какого-либо ограниченного набора. Пример такого перечисления приве­ден в листинге 9.9.

Листинг 9.9. Пример перечисления

using System;

namespace ConsoleApplication1

{

struct Боец

{

public enum Воинское_3вание

{

Рядовой, Сержант, Майор, Генерал

}

public string Фамилия;

public Воинское_3вание Звание;

}

class Class1

{

static void Main()

{

Боец х;

x.Фамилия = "Иванов";

x.Звание = Боец.Воинское_3вание.Сержант;

Console.WriteLine(х.Звание + " " + х.Фамилия);

}

}

}

Результат работы программы:

Сержант Иванов

Перечисления удобно использовать для представления битовых флагов, например:

enum Flags: byte

{

b0, b1, b2, bЗ = 0x04, b4 = 0x08, b5 = 0x10, b6 = 0x20, b7 = 0x40

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: