Применение перечислений C#

Применение перечислений C#, Перечисления в C#, Методу Conveyor в C#, C# Полное руководство Герберт Шилдт, Язык программирования C#, C# полное руководство

На первый взгляд перечисления могут показаться любопытным, но не очень важным элементом С#, но на самом деле это не так. Перечисления очень полезны, когда в программе требуется одна или несколько специальных символически обозначаемых констант. Допустим, что требуется написать программу для управления лентой конвейера на фабрике. Для этой цели можно создать метод Conveyor (), принимающий в качестве параметров следующие команды: “старт”, “стоп”, “вперед” и “назад”. Вместо того чтобы передавать методу Conveyor () целые значения, например, 1 — в качестве команды “старт”, 2 — в качестве команды “стоп” и так далее, что чревато ошибками, можно создать перечисление, чтобы присвоить этим значениям содержательные символические обозначения. Ниже приведен пример применения такого подхода.

// Сымитировать управление лентой конвейера.
using System;

class ConveyorControl {
   // Перечислить команды конвейера.
   public enum Action { Start, Stop, Forward, Reverse };

   public void Conveyor(Action com) {
      switch(com) {
         case Action.Start:
            Console .WriteLine ("Запустить конвейер.");
        break;
     case Action.Stop:
            Console.WriteLine("Остановить конвейер.");
        break;
     case Action.Forward:
            Console.WriteLine("Переместить конвейер вперед.");
        break;
     case Action.Reverse:
            Console .WriteLine ("Переместить конвейер назад.");
        break;
      }
   }
}

class ConveyorDemo {
   static void Main() {
      ConveyorControl с = new ConveyorControl() ;

      с.Conveyor(ConveyorControl.Action.Start);
      с.Conveyor(ConveyorControl.Action.Forward);
      с.Conveyor(ConveyorControl.Action.Reverse);
      с.Conveyor(ConveyorControl.Action.Stop);
   }
}

Вот к какому результату приводит выполнение этого кода:
   Запустить конвейер.
   Переместить конвейер вперед.
   Переместить конвейер назад.
   Остановить конвейер.

Метод Conveyor () принимает аргумент типа Action, и поэтому ему могут быть переданы только значения, определяемые в перечислении Action. Например, ниже приведена попытка передать методу Conveyor () значение 22.

с.Conveyor(22); // Ошибка!

Эта строка кода не будет скомпилирована, поскольку отсутствует предварительно заданное преобразование типа int в перечислимый тип Action. Именно это и препятствует передаче неправильных команд методу Conveyor (). Конечно, такое преобразование можно организовать принудительно с помощью приведения типов, но это было бы преднамеренным, а не случайным или неумышленным действием. Кроме того, вероятность неумышленной передачи пользователем неправильных команд методу Conveyor () сводится с минимуму благодаря тому, что эти команды обозначены символическими именами в перечислении.
В приведенном выше примере обращает на себя внимание еще одно интересное обстоятельство: перечислимый тип используется для управления оператором switch. Как упоминалось выше, перечисления относятся к целочисленным типам данных, и поэтому их вполне допустимо использовать в операторе switch.