Перечислення (зчислення)
Зміст
- Питання/відповідь
- 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#