СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

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

Категория: Информатика

Нажмите, чтобы узнать подробности

Просмотр содержимого документа
«Перечисления enum»

Кроме примитивных типов данных в C# есть такой тип как enum или перечисление. Перечисления представляют набор логически связанных констант. Объявление перечисления происходит с помощью оператора enum. Далее идет название перечисления, после которого указывается тип перечисления - он обязательно должен представлять целочисленный тип (byte, int, short, long). Если тип явным образом не указан, то по умолчанию используется тип int. Затем идет список элементов перечисления через запятую:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

enum Days

{

    Monday,

    Tuesday,

    Wednesday,

    Thursday,

    Friday,

    Saturday,

    Sunday

}

  

enum Time : byte

{

    Morning,

    Afternoon,

    Evening,

    Night

}

В этих примерах каждому элементу перечисления присваивается целочисленное значение, причем первый элемент будет иметь значение 0, второй - 1 и так далее. Мы можем также явным образом указать значения элементов, либо указав значение первого элемента:

1

2

3

4

5

6

7

enum Operation

{

    Add = 1,   // каждый следующий элемент по умолчанию увеличивается на единицу

    Subtract, // этот элемент равен 2

    Multiply, // равен 3

    Divide    // равен 4

}

Но можно и для всех элементов явным образом указать значения:

1

2

3

4

5

6

7

enum Operation

{

    Add = 2,

    Subtract = 4,

    Multiply = 8,

    Divide = 16

}

При этом константы перечисления могут иметь одинаковые значения, либо даже можно присваивать одной константе значение другой константы:

1

2

3

4

5

6

7

enum Color

{

    White = 1,

    Black = 2,

    Green = 2,

    Blue = White // Blue = 1

}

Каждое перечисление фактически определяет новый тип данных. Затем в программе мы можем определить переменную этого типа и использовать ее:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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;. И также если мы будем выводить на консоль значение этой переменной, то мы получим им константы, а не числовое значение. Если же необходимо получить числовое значение, то следует выполнить приведение к числовому типу:

1

2

3

Operation op;

op = Operation.Multiply;

Console.WriteLine((int)op); // 3

Также стоит отметить, что перечисление необязательно определять внутри класса, можно и вне класса, но в пределах пространства имен:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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

    } 

}

Зачастую переменная перечисления выступает в качестве хранилища состояния, в зависимости от которого производятся некоторые действия. Так, рассмотрим применение перечисления на более реальном примере:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

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, передав в нее два числа и тип операции.