Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
387.doc
Скачиваний:
11
Добавлен:
30.04.2022
Размер:
3.51 Mб
Скачать

Контрольная работа № 4 перечисления и структуры

Цель работы: составление программ, использующих сложные типы данных и их методы.

Теоретические сведения

Перечислимый тип описывается с помощью ключевого слова enum

enum <имяТипа>

{

<значение1>,

<значение2>,

…,

<значениеN>

}

Пример:

enum ort : byte

{

norden,

suden,

osten ,

westen =4

}

ort myDirect = ort.osten;

// создаем переменную перечислимого типа

Console.WritelLine(“myDirect= {0}”, myDirect);

// выводим имя значения из перечисления

Console.WritelLine(“myDirect= {0}”, (byte)myDirect);

//выводим порядковый номер значения

// из списка перечисления

Рис. 21. Вывод переменной типа перечисление

Перечислимый тип обладает базовым типом. По умолчанию это int.

Но можно задать и другой тип в качестве базового.

enum <имяТипа> : <базовый тип>

{

<значение1>,

<значение2>,

…,

<значениеN>

}

Допустимы базовые типы:

byte, sbyte, short, ushort, int, long, ulong.

По умолчанию каждому значению перечислимого типа автоматически присваивается соответствующее значение базового типа, начиная с нуля, в том порядке, в котором они написаны, т.е. <значение1>=0, <значение2>=1, <значение3>=2 и т.д.

Можно самостоятельно задать фактические базовые значения для каждого из значений перечисления

enum <имяТипа> : <базовый тип>

{

<значение1> = <фактическоеЗначение1>,

<значение2> = <фактическоеЗначение2>,

…,

<значениеN> = <фактическоеЗначениеN>

}

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

enum <имяТипа> : <базовый тип>

{

<значение1> = <фактическоеЗначение1>,

<значение2> = <значение1>,

<значение3>,

…,

<значениеN> = <фактическоеЗначениеN>

}

Всем значения, оставшимся неуказанными, будут автоматически присвоены базовые значения, на 1 больше последнего указанного фактического значения. Например, если

enum <имяТипа> : <базовый тип>

{

<значение1> = <фактическоеЗначение1>,

<значение2>,

<значение3>=<значение1>,

<значение4>,

…,

<значениеN> = <фактическоеЗначениеN>

}

то окажется, что <значение2>=<значение4>.

Примеры:

enum ort : byte

{

norden=1 , // 1

sudden=osten, // 1

osten=norden, // 1

westen // 2

}

Можно писать и так

enum ort : byte

{

norden=1+1 , // 2

suden=osten+2, // 4

osten=norden-1 // 1

westen // 2

}

Рассмотрим преобразование типов для перечислений.

enum ort : byte

{

norden=1,

suden,

osten,

westen

}

static void Main(string[] args)

{

byte directByte;

string directString;

ort myDirect = ort.suden;

Console.WriteLine("myDirect= {0}", myDirect);

directByte=(byte)myDirect;

//явное преобразование в byte

directString=Convert.ToString(myDirect);

//преобразование в string

Console.WriteLine("byte эквивалент = {0}", directByte);

Console.WriteLine("string эквивалент ={0}", directString);

}

Рис. 22. Преобразование перечислимого типа

В примере вместо строки

directString=Convert.ToString(myDirect);

можно было бы написать

directString=myDirect.ToString();

Базовый класс перечислений - System.Enum

Все перечисления происходят от единого базового класса System.Enum. Рассмотрим его методы.

Метод GetUnderlyingType() позволяет получить информацию о том, какой тип данных используется для представления числовых значений элементов перечисления:

enum EmpType

{

Manager = 10,

Grunt = 20,

Contactor = 30,

VP = 40

} …..

Console.WriteLine(Enum.GetUnderlyingType(typeof(EmpType));

Метод Format() позволяет получить имена элементов перечисления по их числовым значениям

EmpType fred;

fred=EnumType.VP;

…..

Console.WriteLine(Enum.Format(typeof(EmpType),fred,"G"));

//будет выведено VP

Console.WriteLine(Enum.Format(typeof(EmpType),fred,"d"));

//будет выведено 40

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

If (Enum.IsDefined(typeof(EmpType),"SalesPerson"))

Console.WriteLine("Да");

else

Console.WriteLine("Нет");

Для преобразования типа string в перечислимый существует специальный метод Enum.Parse():

(<перечислимыйТип>)Enum.Parse(typeof(<перечислимыйТип>), <значениеСтроки>);

Например:

string myString = “norden”;

ort myDirect = (ort)Enum.Parse(typeof(ort), myString);

Естественно, значение строки должно совпадать со значением из перечисления.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]