Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Операции с перечислениями

Перечисления

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

 

enum Menu { Read, Write, Append, Exit }

enum Радуга { Красный, Оранжевый, Желтый, Зеленый, Синий, Фиолетовый }

 

Для каждой константы задается ее символическое имя. По умолчанию константам присваиваются последовательные значения типа int, начиная с 0, но можно задать и собственные значения, например:

 

enum Nums { two = 2, three, four, ten = 10, eleven, fifty = ten + 40};

 

Константам three и four присваиваются значения 3 и 4, константе eleven – 11. Имена перечисляемых констант внутри каждого перечисления должны быть уникальными, а значения могут совпадать.

Преимущество перечисления перед описанием именованных констант состоит в том, что связанные константы нагляднее; кроме того, компилятор выполняет проверку типов, а интегрированная среда разработки подсказывает возможные значения констант, выводя их список.

С переменными перечисляемого типа можно выполнять:

  • арифметические операции (+, –, ++, – –)
  • логические поразрядные операции (^, &, |, ~)
  • сравнить их с помощью операции отношения (<, <=, >, >=, = =,!=)
  • получать размер в байтах (sizeof).

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


Пример работы с перечислениями:

namespace ConsoleApplication10

{

struct Боец

{

public enum Воинское_Звание

{

Рядовой, Сержант, Лейтенант, Майор, Полковник, Генерал

}

public string Фамилия;

public Воинское_Звание Звание;

}

class Program

{

static void Main(string[] args)

{

Боец x;

x.Фамилия = "Иванов";

x.Звание = Боец.Воинское_Звание.Сержант;

for (int i = 1976; i < 2006; i += 5)

{

if (x.Звание < Боец.Воинское_Звание.Генерал) ++x.Звание;

Console.WriteLine("Год: {0} {1} {2}", i, x.Звание, x.Фамилия);

}

Console.ReadKey(); } }}

Результат работы программы:

Год: 1976 Лейтенант Иванов

Год: 1981 Майор Иванов

Год: 1986 Полковник Иванов

Год: 1991 Генерал Иванов

Год: 1996 Генерал Иванов

Год: 2001 Генерал Иванов

Базовый класс System.Enum

 

Все перечисления в C# являются потомками базового класса System.Enum, который снабжает их некоторыми полезными методами. Статический метод GetName позволяет получить символическое имя константы по ее номеру, например:

 

Console.WriteLine (Enum.GetName(typeof(Боец.Воинское_Звание), 1)); // сержант

Операция typeof возвращает тип своего аргумента

Статические методы GetNames и GetValues формируют, соответственно, массивы имен и значений констант, составляющих перечисление.

Пример:

namespace ConsoleApplication10

{

struct Боец

{

public enum Воинское_Звание

{

Рядовой, Сержант, Лейтенант, Майор, Полковник, Генерал

}

public string Фамилия;

public Воинское_Звание Звание;

}

class Program

{

static void Main(string[] args)

{

Боец x;


Array names = Enum.GetNames(typeof(Боец.Воинское_Звание));

Console.WriteLine("Количество элементов в перечислении:" + names.Length);

foreach (string elem in names) Console.Write(" " + elem);

Array values = Enum.GetValues(typeof(Боец.Воинское_Звание));

foreach (Боец.Воинское_Звание elem in values)

Console.Write(" " + (byte) elem);

Console.ReadKey(); } }}

Статический метод IsDefined возвращает значение true, если константа с заданным символическим именем описана в указанном перечислении, и false в противном случае, например:

if (Enum.IsDefined(typeof(Боец.Воинское_Звание), "Сержант"))

Console.WriteLine("Константа с таким именем существует");

else Console.WriteLine("Константа с таким именем не существует");

Статический метод GetUnderlyingType возвращает имя базового типа, на котором построено перечисление. Например, для перечисления Боец.Воинское_Звание будет получено System.Int32:

Console.WriteLine(Enum.GetUnderlyingType(typeof(Боец.Воинское_Звание)));

<== предыдущая лекция | следующая лекция ==>
Европейская драматургия на рубеже ХІХ – ХХ вв | Пример программы с использованием структур с методами и перечислений
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 912; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.