Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка - Основи Програмування C_.doc
Скачиваний:
46
Добавлен:
18.12.2018
Размер:
1.44 Mб
Скачать

2. Переліки.

Перелік в мові С#, як і у багатьох інших мовах, це визначений користувачем злічений тип-значення. Іншими словами – це визначений список імен із зумовленими цілими значеннями. Синтаксис визначення переліку – наступний:

enum <ідентифікатор_переліку> {<список_переліку>};

Тут <список_переліку> являє собою список констант, відокремлених комами. За замовчуванням значенням першої константи є 0, а кожна наступна константа має значення на одиницю більшу від попередньої. Втім будь-якій із констант можна присвоїти довільне ціле значення. Розглянемо приклади.

using System;

namespace Use_enum_0

{

class Program

{

// Цей перелік задає дні тижня

public enum Days { Sun, Mn, Tu, We, Th, Fr, St };

static void Main()

{

for (Days d = Days.Sun; d <= Days.St; d++)

Console.WriteLine("День - {0}, значення - {1}", d,

(int)d);

}

}

}

Тут визначений перелік Days для іменування днів тижня. В циклі змінна d типу Days пробігає значення всіх днів тижня. На екран виводиться назва дня та його значення. Як видно з прикладу доступ до членів переліку відбувається з допомогою крапкової нотації із ідентифікатору переліку та дня тижня: Days.Sun або Days.St. На екрані будуть наступні повідомлення:

День - Sun, значення - 0

День - Mn, значення – 1

День - Tu, значення – 2

День - We, значення – 3

День - Th, значення – 4

День - Fr, значення – 5

День - St, значення - 6

Як вже зазначалось, члени переліку можуть мати довільні значення, вказані при визначенні списку переліку. У наступному прикладі визначається подібний перелік.

using System;

namespace Use_enum_1

{

class Program

{

public enum Flags { ok = 0, error = 128, avost = 1024};

static void Main()

{

Flags flag;

// Тут має бути ініціалізація змінної flag

switch (flag)

{

case Flags.ok :

Console.WriteLine("Успiшне завершення");

break;

case Flags.error :

Console.WriteLine("Помилка виконання");

break;

case Flags.avost :

Console.WriteLine("Аварiйне завершення");

break;

default : Console.WriteLine("неприпустиме значення");

break;

}

}

}

}

Перелік Flags містить прапорці завершення деякого процесу. Можливим варіантам ok, error та avost приписані відповідно константи 0, 128 та 1024. У перемикачі switch аналізується значення змінної flag та виводиться відповідне повідомлення. Змінна flag може бути проініціалізована різними способами, наприклад, безпосередньо: flag = (Flags) 1024;. При цьому ініціалізація константою, якої немає у переліку, призведе до активації гілку default перемикача switch.

Оскільки переліки походять від типу System.Enum, вони мають низку корисних методів. Зокрема статичний метод GetName() повертає назву заданої у переліку константи. Наприклад, інструкція

Console.WriteLine(Enum.GetName(typeof(Flags), 128));

у попередньому прикладі призведе до появи на екрані наступного повідомлення: error. Метод Format() дозволяє визначити, якому саме елементу переліку відповідає значення змінної. При цьому це значення можна одержати у десятковому, шістнадцядковому або текстовому форматі в залежності від того, яким символом заданий вид форматування: "d", "x" чи "g". Так, задавши низку інструкцій:

flag = (Flags) 1024;

Console.WriteLine(Enum.Format(typeof(Flags), flag, "d"));

Console.WriteLine(Enum.Format(typeof(Flags), flag, "x"));

Console.WriteLine(Enum.Format(typeof(Flags), flag, "g"));

на екрані побачимо:

1024

00000400

avost.

Корисним також є метод Enum.GetNames(). Він повертає масив назв констант у вказаному переліку. Цей масив далі може бути використаний, наприклад, у циклі foreach. Таким чином, задавши код:

Console.WriteLine("Значення прапорцiв наступнi:");

foreach (string s in Enum.GetNames(typeof(Flags)))

Console.WriteLine(s);

на екрані одержимо всі назви констант переліку Flags:

ok

error

avost

System.Enum також має методи, що повертають кількість констант у переліку, сам масив констант, результат перевірки, чи є дана константа елементом переліку та інші корисні методи.