Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 46

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 40 41 42 43 44 45 < 46 > 47 48 49 50 51 52 .. 404 >> Следующая


иыяПерекеииой = иыяТипа. зна чоние ;

Перечислимый тип обладает базовым типом (underlying type), который используется для хранения. Любое из значений, которые этот тип может принимать, будет храниться в памяти как значение базового типа (по умолчанию это тип int). Однако существует возможность задать в качестве базового другой тип, добавив к описанию тнпа имя его базового типа:

епиа ныяТипа j б&эовийТип

С

энлчеяие!, значенне2, эначениеЗ,

зна челиеЛГ

> .

Перечислимые типы могут использовать в качестве базовых следующие типы: byte, sbyte, short, ushort, int, uint, long H ulong.

По умолчанию каждому значению перечислимого тнпа автоматически присваивается соответствующее значение базового типа, начиная с нуля, в том порядке, в котором они описаны. Другими словами, значение! получит базовое значение О, значение2 — I, значение! — 2 и т. д. Для того чтобы переопределить такой порядок, следует использовать оператор — н фактические базовые значения для каждого перечислимого значения:

enum иыяТнла ; базовыйТип

{

. значение! “ 4 ктхческое$начвнне1,

зяачениеЗ ¦ флхттескоеЗыачениоЗ, эначениеЗ * фахтхческоаЗначеннеЗ, '

. значением ¦ фахтическоеЗкачеимеК

}

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

enum мыяТипа : блзовьгйТип

<

значение1 - фажтическоеЭначенне!, значение^ * значение!,
Дополнительные сведения о переменных

87

значениеЗ,

значением * фактческоеЭначениеН

)

Всем значениям, оставшимся неуказанными, будут автоматически присвоены базовые значения; для этого используется последовательность, начинающаяся со значения, на единицу большего последнего явно заданного значения. В вышеприведенном объявлении эначениез получит базовое значение, равное значение! + i.

Обратите внимание, что это может привести к возникновению непредвиденных проблем, когда какие-либо нз базовых значений, заданных после определения вроде эначениез = значение!, окажутся идентичными другим базовым значениям. Так, например, в следующей программе базовое значение дня значение4 и для значение2 будет одним и тем же:

enum иыяТипа : базоаыйТип {

значение! » фактическоеЗначение!, зиаченив2,

значениеЗ ш значение!, значениеЛ,

зяачениеЫ ¦= фахтичеегсоеЗначениеЫ

)

Это совершенно нормально, если, конечно, вы хотели добиться именно такого эффекта.

Обратите также внимание, что присваивание значений циклическим образом приведет к возникновению ошибки:

enum ииятипа : базоаыйТип значение! ¦ зяячавивЗ,

зиаче,№92 * значение! ЯН

Теперь давайте посмотрим, каким образом все это можно использовать.

Практикум: использование перечислимых типов

t. Создайте новое консольное приложение с именем сш)5ех02 в директории C:\BegCSharp\Cliapter5.

2. Добавьте следующий код в Classl.са:

namespace Ch05Ex02

t enum orientation : byte ( „

north *1. south =2.

eaet >3, -

west ¦ 4

Itt <eumnary>

ill Summary description for Claaal. It! </sunmary> class Claesl {

static void Main(atringH args)
Глава 5

{

orientation myDirection = orientation.northi

Console.WriteLine('myDirection ¦» С0J”, щ/DirectionJ i

}

>

)

3. Запустите приложение. На консоли появится следующий выходной поток:

4. Выйдите из приложения и измените программу следующим образом:

byte directionBytet string directionString;

orientation myDirection = orientation.northi Coneole.WriteLine)'myDirection = (0}*H myDirection); directionByte * (byte)myDirection;

DirectionString » Convert.ToStringfnyDirection) j

Console,WriteLine ('byte: equivalent (0)', dircctionByte);

ConSole.KriteLinef'Btrina «jtiivalent * 10)', directionString);

5. Повторно запустите приложение;

|^G\Be^Sb^^\GBapte|-S^th05EH(3'ibij t'DttiiJii'11щЬ5?н1Т2,еис

ion - rjn-i'tii

Uytt; e ДО in a leilt - 1 si-i-.ing etiuiy iilen t = noi'Ui Pi'^r.c an ij key To continue

EE

J&J*!

A

Как это работает

В данной программе определяется и используется перечислимый тип с именем orientation. Первое, на что следует обратить внимание: код с описанием тнпа помещен в пространство имен ch05Ex02, а не в то место, где находится остальной код. Это сделано потому, что в процессе выполнения программы не происходит последовательного выполнения строк определения, как это имеет место с другими строками кода приложения. Выполнение приложения начинается с определяемого нами места, причем приложение имеет доступ к новому типу, поскольку принадлежит тому же пространству имен.

Первый вариант нашего примера демонстрирует основной метод создания переменной нового типа, присваивание ей значения и вывод этого значения па экран.

Затем мы модифицировали код, чтобы показать преобразование перечислимых значений в другие типы. Заметьте, что в таких случаях необходимо использовать
Дополнительные сведения о переменных __________________________________________89

явное преобразование. Несмотря на то что базовым типом типа orientation является тип byte, нам все равно приходится использовать явное приведение типа (byte) для преобразования значения переменной myDirection в тип byte:
Предыдущая << 1 .. 40 41 42 43 44 45 < 46 > 47 48 49 50 51 52 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.