Основы объектно-ориентированного программирования на языке C# book | Page 78

5 Типи даних Програмiст може вказати тип, що лежить в основi типу перера- хування, написавши ’“ : тип_що_лежить_в_основi ” пiсля назви типу перерахування в його оголошеннi, наприклад: enum Direction : byte { Left, Right } При такому оголошеннi, значення типу Direction при виконаннi програми будуть подаватися цiлими числами типу byte i будуть за- ймати 1 байт. Однак слiд зауважити, що тип перерахування, в основi якого лежить тип byte не може мiстити бiльше 256 значень через дiапазон типу byte . При оголошеннi без явного вказання типу, що лежить в основi enum Direction { Left, Right } типом, що лежить в основi Direction буде int (за замовчуванням) i значення типу Direction будуть подаються числами типу int (обся- гом в 4 байти). За замовчуванням, iменам, вказаним в оголошеннi типу перера- хування (у порядку ı̈х перелiку в оголошеннi) вiдповiдають числа 0,1,2, ... типу, що лежить в його основi. Наприклад, значенню Di- rection.Left типу Direction вiдповiдає число 0, значенню Directi- on.Right вiдповiдає число 1. Отримати число, що вiдповiдає значенню типу перерахування мо- жна за допомогою явного перетворення типiв, як показано нижче: Direction x = Direction.Right; int value = (int) x; // отримати число, що вiдповiдає значенню x Console.WriteLine(value); // результат: 1 Зворотне перетворення також можливе: Direction x; x = (Direction) 1; // отримати значення, що вiдповiдає числу 1 Console.WriteLine(x); // результат: Right Слiд зазначити, що коли не всiм числам типу, що лежить в осно- вi типу перерахування, вiдповiдають iменi в типi перерахування, то змiннiй типу перерахування можна присвоı̈ти значення, що не має iменi (це не є помилкою виконання або компiляцiı̈, але таку можли- вiсть використовувати не рекомендується для попередження логiчних помилок в програмi): Direction x; x = (Direction) 2; // отримати значення, що вiдповiдає числу 1 Console.WriteLine(2); // результат: 2 (не має iменi в типi Direction) 78