Перечисления (enum)
Содержание
- Вопрос/Ответ
- 1. Что называется перечислением в языке C#?
- 2. Какая общая форма объявления типа «перечисление»? Ключевое слово enum
- 3. В каких местах программы можно объявлять тип «перечисление»
- 4. Примеры объявления перечислений и их использование в программе
- 5. Как осуществляется инициализация перечисления? Пример
- 6. Какой базовый тип по умолчанию имеют константы в перечислении?
- 7. Каким образом можно изменить базовый тип констант в «перечислении»?
- 8. Какие преимущества дает использование перечислений в программе?
- 9. Пример использования перечисления с оператором switch
- Связанные темы
Поиск на других ресурсах:
1. Что называется перечислением в языке C#?
Перечисления в языке C# представляют собой набор (последовательность) констант, которые образуют тип данных. Значение каждой константы задается именем. В языке C# перечисления представлены классом. Все перечисления наследуются от класса System.Enum.
⇑
2. Какая общая форма объявления типа «перечисление»? Ключевое слово enum
Общая форма объявления типа перечисление имеет вид:
enum имя { список_констант };
где
- имя – это имя (название) типа перечисления;
- список_констант – список идентификаторов, разделенных запятой.
⇑
3. В каких местах программы можно объявлять тип «перечисление»
Тип «перечисление» можно объявлять в пределах пространства имен, в пределах класса. В теле метода объявить тип «перечисление» не удастся.
⇑
4. Примеры объявления перечислений и их использование в программе
Пример 1. Объявление типа Month, определяющее перечень месяцев года.
// Объявить тип Month enum Month { January, February, March, April, May, June, July, August, September, October, November, December }
Использование типа Month в другом программном коде (например, обработчике события)
// использование перечисления в программном коде Month M; // Объявление переменной M типа "перечисление" M = Month.January; // M = January int m; m = (int)M; // m = 0 M = Month.August; // M = August m = (int)M; // m = 7
Пример 2. Объявление типа DayWeek, содержащего информацию о дне недели.
enum DayWeek { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }
Пример использования составных операторов присваивания с переменной типа DayWeek:
DayWeek D; D = DayWeek.Sunday; D++; // D = Monday D += 2; // D = Wednesday D += 10; // D = 13 D = DayWeek.Friday; --D; // D = Thursday D = D - 8; // D = -4
⇑
5. Как осуществляется инициализация перечисления? Пример
Пример 1. Инициализация перечисления типа Month, в котором каждый месяц инициализируется значением, равным количеству дней в этом месяце.
Объявление перечисления:
// Объявить тип Month enum Month { January = 31, February = 28, March = 31, April = 30, May, June = 30, July, August = 31, September = 30, October, November = 30, December }
Демонстрация использования переменной типа Month
Month M; int days; M = Month.December; // days = (int)M; // days = 31 M = Month.October; days = (int)M; // days = 31 M = Month.February; days = (int)M; // days = 28
Пример 2. Объявление перечисления, в котором день недели имеет свой номер, начиная с понедельника. Демонстрируется правило: каждой следующей константе присваивается значение, которое на 1 больше значения предшествующей инициализированной константы.
Объявление перечисления типа DayWeek
enum DayWeek { Sunday = 7, Monday = 1, Tuesday, Wednesday, Thursday, Friday, Saturday }
Демонстрация использования в программе
DayWeek DW; // переменная типа DayWeek DW = DayWeek.Saturday; // Определение того, выходной день или рабочий if ((DayWeek.Monday <= DW) && (DW <= DayWeek.Friday)) label1.Text = "Рабочий день"; else label1.Text = "Выходной день"; DW = DayWeek.Thursday; int num = (int)DW; // num = 4 num = (int)DayWeek.Tuesday; // num = 2
⇑
6. Какой базовый тип по умолчанию имеют константы в перечислении?
По умолчанию, базовым типом для констант в перечислении есть тип int.
⇑
7. Каким образом можно изменить базовый тип констант в «перечислении»?
Чтобы изменить базовый тип констант с int на другой, нужно указать этот тип сразу после имени перечисления. Общая форма такого объявления будет иметь вид:
enum имя : новый_тип { список_констант };
где
- имя – это имя (название) типа перечисления;
- новый_тип – собственно, новый тип, который устанавливается вместо базового типа;
- список_констант – список идентификаторов, разделенных запятой.
Пример. Приводится объявление типа, который определяет оценки по дисциплинам. В объявлении перечисления константы получают тип byte.
enum Marks : byte { unsatisfactory = 2, satisfactory, good, excellent }
Использование переменной типа Marks в программе
Marks M; M = Marks.good; byte b; b = (byte)M; // b = 4 b = (byte)Marks.excellent; // b = 5
⇑
8. Какие преимущества дает использование перечислений в программе?
Использование перечислений есть эффективным, если в программе часто используются константы, которые имеют символические обозначения. Использование перечислений вместо числовых значений имеет следующие преимущества:
- повышение понимания и читабельности программного кода, поскольку обращение происходит не к числам, а к смысловым именам;
- улучшение контроля допустимости имен и их значений. Использование перечислений гарантирует, что переменные будут иметь значения из ожидаемого (допустимого) набора значений. Если попробовать присвоить не описанное в перечислении значение, то компилятор выдаст ошибку;
- экономия времени программиста. При использовании имен система IntelliSense отображает удобный список всех допустимых имен в перечислении. Достаточно только выбрать нужное значение из списка;
- расширение функционала. Поскольку перечисления наследуются от класса System.Enum, то к ним добавляется несколько полезных методов реализованных в этом классе;
- уменьшение количества вероятных ошибок в программе.
Также, использование перечислений позволяет сгруппировать наборы констант в единое целое с целью дальнейшего оперирования ими. Это, в свою очередь, упорядочивает программный код и уменьшает риск допущения ошибки программистом.
⇑
9. Пример использования перечисления с оператором switch
В примере приводится использование перечисления Month для определения количества дней в месяце.
Пусть заданы объявления перечисления Month
// Объявить тип Month enum Month { January, February, March, April, May, June, July, August, September, October, November, December }
Использование переменной типа Month в программе
// Определение количества дней в месяце Month M; int n_days; M = Month.November; switch (M) { case Month.February: n_days = 28; break; case Month.April: case Month.June: case Month.September: case Month.November: n_days = 30; break; default: n_days = 31; break; } // вывод на форму label1.Text = n_days.ToString();
⇑
Связанные темы
- Класс System.Enum. Работа с перечислениями. Примеры
- Структуры. Общие понятия. Тип структуры. Структурная переменная. Модификаторы доступа к структурной переменной. Примеры использования структур в программе
- Интерфейсы. Использование интерфейсов в C#