Занятие №62
Тип данных enum: объявление и особенности использования. Операции с перечислениями.
Перечисление (enum) — это набор логически связанных констант. Перечисление позволяет задать имена для небольшого набора используемых целочисленных значений.
Синтаксис объявления перечисления:
модификтор_доступа enum имя : тип
{
имя1 = значение1,
имя2 = значение2,
…
}
Тип перечисления обязательно должен представлять целочисленный тип (byte, int, short, long). Если тип явным образом не указан, то по умолчанию используется тип int.
Пример:
enum Days
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
Каждому элементу перечисления присваивается целочисленное значение, причем первый элемент будет иметь значение 0, второй - 1 и так далее. Мы можем также явным образом указать значения элементов, либо указав значение первого элемента:
enum Operation
{
Add = 1, // каждый следующий элемент по умолчанию //увеличивается на единицу
Subtract, // этот элемент равен 2
Multiply, // равен 3
Divide // равен 4
}
Можно и для всех элементов явным образом указать значения:
enum Operation
{
Add = 2,
Subtract = 4,
Multiply = 8,
Divide = 16
}
Константы перечисления могут иметь одинаковые значения, либо даже можно присваивать одной константе значение другой константы:
enum Color
{
White = 1,
Black = 2,
Green = 2,
Blue = White // Blue = 1
}
Каждое перечисление фактически определяет новый тип данных. Затем в программе мы можем определить переменную этого типа и использовать ее:
enum Operation
{
Add = 1,
Subtract,
Multiply,
Divide
}
class Program
{
static void Main(string[] args)
{
Operation op;
op = Operation.Add;
Console.WriteLine(op); // Add
Console.ReadLine();
}
}
В программе можно присвоить значение этой переменной. При этом в качестве ее значения должна выступать одна из констант, определенных в данном перечислении. То есть несмотря на то, что каждая константа сопоставляется с определенным числом, мы не можем присвоить ей числовое значение, например, Operation op = 1;. И также если мы будем выводить на консоль значение этой переменной, то мы получим имя константы, а не числовое значение. Если же необходимо получить числовое значение, то следует выполнить приведение к числовому типу:
Operation op;
op = Operation.Multiply;
Console.WriteLine((int)op); // 3
Перечисление необязательно определять внутри класса, можно и вне класса, но в пределах пространства имен.
enum Operation
{
Add = 1,
Subtract,
Multiply,
Divide
}
class Program
{
static void Main(string[] args)
{
Operation op;
op = Operation.Add;
Console.WriteLine(op); // Add
Console.ReadLine();
}
}
Часто переменная перечисления выступает в качестве хранилища состояния, в зависимости от которого производятся некоторые действия.
Например:
class Program
{
enum Operation
{
Add = 1,
Subtract,
Multiply,
Divide
}
static void MathOp(double x, double y, Operation op)
{
double result = 0.0;
switch (op)
{
case Operation.Add:
result = x + y;
break;
case Operation.Subtract:
result = x - y;
break;
case Operation.Multiply:
result = x * y;
break;
case Operation.Divide:
result = x / y;
break;
}
Console.WriteLine(" Результат операции равен {0}", result);
}
static void Main(string[] args)
{
// Тип операции задаем с помощью константы Operation.Add, которая равна 1
MathOp(10, 5, Operation.Add);
// Тип операции задаем с помощью константы Operation.Multiply, которая равна 3
MathOp(11, 5, Operation.Multiply);
Console.ReadLine();
}
}
Здесь имеется перечисление Operation, которое представляет арифметические операции. Также определен метод MathOp, который в качестве параметров принимает два числа и тип операции.
В основном методе Main два раза вызывается процедура MathOp и в нее передаются два числа и тип операции.