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

Перечислення (зчислення)


Зміст



1. Що називається перечисленням у мові C#?

Перечислення у мові C# представляють собою набір (послідовність) констант, які утворюють тип даних. Значення кожної константи задається ім’ям.

 

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. Які переваги дає використання перечислень у програмі?

Використання перечислень є ефективним, коли в програмі часто використовуються константи, що мають символічні позначення. Використання символічних позначень замість числових значень дозволяє:

  • підвищити розуміння та читабельність програмного коду;
  • зменшити кількість ймовірних помилок у програмі.

Також, використання перечислень дозволяє згрупувати набори констант в єдине ціле для подальшого оперування ними. Це, в свою чергу, впорядковує програмний код та зменшує ризик допущення помилки програмістом.

 

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();

 


Зв’язані теми