Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Инициализация перечисления




Значение одной или нескольких символически обозначаемых констант в перечис­лении можно задать с помощью инициализатора. Для этого достаточно указать после символического обозначения отдельной константы знак равенства и целое значение. Каждой последующей константе присваивается значение, которое на единицу больше значения предыдущей инициализированной константы. Например, в приведенном ниже фрагменте кода константе RedDel присваивается значение 10.

enum Apple { Jonathan, GoldenDel, RedDel = 10, Winesap,

Cortland, Mcintosh };

В итоге все константы в перечислении принимают приведенные ниже значения.

Jonathan 0

GoldenDel 1

RedDel 10

Winesap 11

Cortland 12

Mcintosh 13

Указание базового типа перечисления

По умолчанию в качестве базового для перечислений выбирается тип int, тем не менее перечисление может быть создано любого целочисленного типа, за исключени­ем char. Для того чтобы указать другой тип, кроме int, достаточно поместить этот тип после имени перечисления, отделив его двоеточием. В качестве примера ниже за­дается тип byte для перечисления Apple.

enum Apple: byte { Jonathan, GoldenDel, RedDel,

Winesap, Cortland, Mcintosh };

Теперь константа Apple.Winesap, например, имеет количественное значение типа byte.

 

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

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

Листинг 12.19

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

 

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 c = new ConveyorControl();

 

c.Conveyor(ConveyorControl.Action.Start);

c.Conveyor(ConveyorControl.Action.Forward);

c.Conveyor(ConveyorControl.Action.Reverse);

c.Conveyor(ConveyorControl.Action.Stop);

}

}

Вот к какому результату приводит выполнение этого кода.

Запустить конвейер.

Переместить конвейер вперед.

Переместить конвейер назад.

Остановить конвейер.

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

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

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

В приведенном выше примере обращает на себя внимание еще одно интересное обстоятельство: перечислимый тип используется для управления оператором switch. Как упоминалось выше, перечисления относятся к целочисленным типам данных, и поэтому их вполне допустимо использовать в операторе switch.

 





Поделиться с друзьями:


Дата добавления: 2016-12-28; Мы поможем в написании ваших работ!; просмотров: 353 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Сложнее всего начать действовать, все остальное зависит только от упорства. © Амелия Эрхарт
==> читать все изречения...

2221 - | 2093 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.