Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 59

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 53 54 55 56 57 58 < 59 > 60 61 62 63 64 65 .. 320 >> Следующая

// Создаем перечисление епшп ЕтлрТуре
Manager, II - О
Grunt, II = 1
Contractor. = 2
VP // - 3
}
Перечисление EmpType определяет четыре именованные константы, каждой из которых соответствует определенное числовое значение. По умолчанию в перечислениях С# первому элементу соответствует числовое значение 0, второму — п+1, третьему — п+2 и т. д. При необходимости вы легко сможете изменить исходную точку отсчета:
// Начинаем со 102
enum EmpType {
Manager = 102. Grunt, // - 103
Contractor. // = 104 VP // = 105
}
Для элементов перечисления вовсе не обязательно использовать строго последовательные числовые значения. Например, перечисление можно создать так, как показано ниже, и компилятор совсем не будет против:
//Элементы перечисления могут иметь произвольные числовые значения
enum EmpType
I
Manager = 10.
Grunt - 1. Contractor - 100, VP = 99
}
Если посмотреть, что происходит с элементами перечисления при компиляции, то окажется, что компилятор попросту подставляет вместо них соответствующие числовые значения. По умолчанию для этих числовых значений компилятор использует тип данных int. Однако вам ничего не мешает явным образом объявить компилятору, что следует использовать другой тип данных, в нашем примере — byte:
// Вместо элементов перечисления будут подставляться числовые значения типа byte enum EmpType : byte
Перечисления 129
{
Manager = 10. Grunt = 1. Contractor = 100. VP = 9
}
Точно таким же образом можно использовать любой из основных целочислен ных типов данных I Я (byte, sbyte, short, ushort, int, uint, long, ulong).
После того как перечисление вместе с необходимым типом данных определено, вы можете использовать его элементы в программе, например, так, как показане ниже. Обратите внимание на то, что в нашем классе определена статическая фун кция, принимающая в качестве единственного параметра ЕшрТуре:
using System; class EnumClass {
public static void AskForBonus(EmpType e) {
switch(e)
{
case EmpType.Contractor:
Console.WriteLineCYou are already get enough cash...");
break;
case EmpType.Grunt:
Console.WriteLineC'You havve got to be kidding..,");
break;
case EmpType.Manager:
Console.WriteLinet"How about stock options instead?"):
break;
case EmpType.VP:
Console.WriteLine("VERY GOOD, Sir!");
break;
default: break; }
}
public static int tfa-inistrlngn args) {
II Создаем тип Contractor EmpType fred;
fred = EmpType.Contractor;
AskForBonus(fred);
return
Базовый класс System.Enum
Все перечисления в С# происходят от единого базового класса System.Enum. Конечно же, в этом базовом классе предусмотрены методы, которые могут существенно
130 Глава 2 • Основы языка С#
облегчить вашу работу с перечислениями. Первый метод, о котором необходимо упомянуть, - это статический метод GetUnderlyingType (), который позволяет получить информацию о том, какой тип данных используется для представления числовых значений элементов перечисления:
Ii Получаем тип числовых данных перечисления (в нашем примере это будет System.Byte) Consol е.WriteLi net Enum. GetllnderlyingTypeUypeof (EmpType)));
Кроме того, вы можете получать значимые имена элементов перечисления по их числовым значениям. Эту работу за вас выполняет статический метод Enum. Format <). В нашем примере переменной типа EmpType соответствовало имя элемента перечисления Contractor (то есть эта переменная разрешалась в числовое значение 100). Для того чтобы узнать, какому элементу переменной соответствует это числовое значение, необходимо вызвать метод Enum. Format, указать тип перечисления, числовое значение (в нашем случае через переменную) и флаг форматирования (в нашем случае — G, что означает вывести как тип string, можно использовать также флаги X — шестиадцатеричное значение и d — десятичное значение):
// Этот код долиен вывести на системную консоль строку "You are a Contractor EmpType fred:
fred EmpType. Contractor:
Console, WriteLineC'YoLi are a [G)1 Enum. Format(typeof(EmpType). fred. "S"}):
B System. Enum предусмотрен еще один полезный статический метод - GetValuesC). Этот метод возвращает экземпляр System.Array, при этом каждому элементу массива будет соответствовать член указанного перечисления:
// Получаем информацию о количестве элементов в перечислении Array obj = Enurn.GetValues(typeDf(ErapType)):
Console.Kr4eL<ne(*This елигг has {С} members.*, obj. Length);
// А теперь выводим имена элементов перечисления в формате string и соответствующие т числовые значения
foreach (EmpType е in obj) .
Console.Write("String name: {0}". Enum.Format<typeof(EmpType). e. "G")): Console.WriteC" ({0})". Enum.Format(typeof(EmpType), e, "D")): Console.Writer hex: {0}\n". Enum. Format(typeof(EmpType), e, T));
}
Результат работы этой программы (и предыдущих примеров, посвященных перечислениям) представлен на рис. 2.24.
1? D:\CSherpBDok\tahf\diaRterZ\ WSSSSSSSSsia
UERV GOOD, Sir! uys ten.Byte Vou are a UP This enum їм:; 4 menbers. String плие: Grunt <1> hex: 01 !!trinijnam: UP <9> hex: 09 String папе: Manayer <І0> hex: ШІ String папе: Contractor <10B> hex: 64 Press any key to continue 1 zi
Предыдущая << 1 .. 53 54 55 56 57 58 < 59 > 60 61 62 63 64 65 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100