Тип enum предназначен для создания перечислений. Каждое перечисление определяет группу именованных констант. Например:
enum E1 {One, Two, Three}
Такое перечисление эквивалентно следующим строкам кода:
const int One = 0;
const int Two = 1;
const int Three = 2;
Таким образом, перечисление — это всего лишь компактное объявление сразу нескольких целочисленных констант. Применение перечислений делает программы нагляднее. Например:
using System;
public class EnumDemo
{
enum Месяцы {Январь, Февраль, Март, Апрель, Май, Июнь,
Июль, Август, Сентябрь, Октябрь, Ноябрь, Декабрь};
static void Main()
{
Месяцы Месяц = Месяцы.Август;
if (Месяц == Месяцы.Август)
Console.WriteLine("Еду к морю!");
}
}
При необходимости можно изменить начальную точку отсчета:
enum E1 {
One = 1, // = 1
Two, // = 2
Three}; // = 3
Более того, для элементов перечисления необязательно использовать строго последовательные числовые значения. Например:
enum E1 {One = -1, Two = 99, Three = 0};
По умолчанию создается группа констант типа int, но программист может явно указать базовый тип:
enum E1: byte {One, Two, Three};
Таким же образом можно указывать любой из целочисленных типов С# (byte, sbyte, short, ushort, int, uint. long. ulong).
В основе перечислений лежит системный тип System.Enum. В нем предусмотрены статические общедоступные методы, некоторые из которых показаны в табл. 5.7.
Таблица 5.7. Методы класса System.Enum
Метод
Описание
string GetName(Type enumType, object Value);
Возвращает имя члена Value перечисления valueType
string{} GetNames(Type enumType);
Возвращает массив имен всех членов перечисления enumType
string Format(Type enumType, object value, string format);
Возвращает имя или значение члена Value перечисления enumType в зависимости от флага форматирования format
Type GetUnderlyingType(Type enumType);
Возвращает тип членов перечисления enumType
Array GetValues(Type enumType);
Возвращает массив значений всех членов перечисления enumType
bool IsDefined(Type enumType, object Value);
Возвращает true, если в перечислении enumType есть член Value
При обращении к методу Format() разрешается указывать один их флагов форматирования, описанных в табл. 5.8.
Таблица 5.8. Допустимые флаги форматирования метода Format
Флаг
Описание
G или g
Если член перечисления Value задан значением, метод возвращает его имя, в противном случае — его значение
Х или х
Возвращает 16-ричное значение члена перечисления
D или d
Возвращает десятичное значение члена перечисления
В листинге 5.6 приведена программа, иллюстрирующая работу с перечислениями (файл Ch05\EnumTester\Class1.cs). Для вывода членов перечисления в ней используется цикл foreach, который описан в главе 7.
Листинг 5.6. Работа с перечислениями
using System;
public class Program
{
enum Days {Понедельник, Вторник, Среда,
Четверг, Пятница, Суббота, Воскресенье};
public static void Main()
{
Type weekdays = typeof(Days);
Days wd = Days.Пятница;
Console.WriteLine("Члены перечисления Days и их значения:");
foreach(string s in Enum.GetNames(weekdays) )
Console.WriteLine( "{0,-12}= {1}", s,
Enum.Format(weekdays, Enum.Parse(weekdays, s), "d"));
Console.WriteLine();
Console.WriteLine("Базовый тип членов: {0}\n",
Enum.GetUnderlyingType(weekdays));
Console.WriteLine("16-ричное значение члена {0} равно {1}",
wd.ToString(), Enum.Format(weekdays, wd, "X"));
Console.ReadLine();
}
}
0 коммент.:
Отправить комментарий