Обучающие курсы:

Обучение профессии "Разработчик C#" + стажировка в Mail.ru
Обучение профессии "Разработчик Python" + трудоустройство
Обучение профессии "Веб-разработчик" + стажировка в Mail.ru


Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





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

С понятием перечисления вы уже встречались и знакомы... Нет, нет, не в прошлой жизни, а в курсе языка программирования “Си” вы познали его. Несмотря на этот радостный и знаменательный факт не будем предаваться сладким воспоминаниям о днях минувших, а вспомним, что это такое ещё раз и рассмотрим его в аспекте “C#”.

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

enum название{
	список констант
}

Итак, на место названия подставляется реальное имя для создаваемого перечислимого типа. Список констант – содержит список идентификаторов, разделенных запятыми. Например:

enum Cars{Opel,BMW,Mercedes,Ford};	

Как и в. С++ константам, указанным в перечислении соответствуют целочисленные значения. По умолчанию если никаких значений не указано явно, то тогда первая величина равна нулю, следуюшая на один больше, то есть одному, и так далее (т.е. каждая следующая больше предыдущей на один). В нашем примере Opel = 0, BMW = 1,Mersedes = 2,Ford = 3. Доступ к самим константам осуществляется с помощью следующего синтаксиса:

название_перечисления.константа

Например:

using System;
class Sample
{
    enum Cars{Opel,BMW,Mercedes,Ford};	// Определение перечислимого типа Cars
	static void Main()
	{
		try
		{
			Console.WriteLine(Cars.Opel+"\n\n");
			
			Cars bmw = Cars.BMW;
			switch(bmw){
				case Cars.Opel:
					Console.WriteLine("Опель - машина среднего класса");
				break;
				case Cars.BMW:
					Console.WriteLine("BMW - спортивная машина");
				break;
				case Cars.Ford:
					Console.WriteLine("Ford - американская машина");
				break;
				case Cars.Mercedes:
					Console.WriteLine("Mercedes - отличная немецкая машина");
				break;
				default:
					Console.WriteLine("Неопознанная марка");
				break;
			}
		}
		catch(Exception ex)
		{
			Console.WriteLine(ex.Message);
		}
		Console.Read();
	}
}

Кроме принятия значений по умолчанию можно также явно задавать их. Например:

enum Numbers{Odin=1,Pyat=5,Six,Ten=10};	// Определение перечислимого типа

Numbers.Six равен 6, то есть плюс 1 от предыдущего значения.

Базовый тип перечисления

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

enum DaysOfWeek:ushort{Ponedelnik,Vtornik,Sreda,Chetverg,
Pyatnica,Subbota,Voskresenie};

В выше приведенном фрагменте базовым типом является ushort. В качестве базового типа можно указать – byte,sbyte,short,ushort,int,uint,long,ulong.

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

На самом деле все перечисления происходят от единого базового класса System.Enum. Безусловно, для вас это интересная и важная новость. Исходя из неё можно сделать вывод, что мы можем использовать методы этого замечательного класса библиотеки .NET Framework. Рассмотрим несколько. Метод IsDefined помогает определить является ли выбранная символьная строка элементом указанного перечисления. К примеру, нам жизненно нужно узнать это о значении Test:


using System;
class Sample
{
    enum DaysOfWeek:ushort{Ponedelnik,Vtornik,Sreda,Chetverg,
Pyatnica,Subbota,Voskresenie};
// Определение перечислимого типа Cars static void Main() { try { if(Enum.IsDefined(typeof(DaysOfWeek),"Test")){ Console.WriteLine("Yes !!!"); } else{ Console.WriteLine("No !!!"); } if(Enum.IsDefined(typeof(DaysOfWeek),"Vtornik")){ Console.WriteLine("Yes !!!"); } else{ Console.WriteLine("No !!!"); } } catch(Exception ex) { Console.WriteLine(ex.Message); } Console.Read(); } }

На экране:

No!!!
Yes!!!

No появляется на экране, так как Test это не константа, входящая в список констант перечислимого типа DaysOfWeek. Для получения информации о том, какой тип данных содержится внутри перечисления используют статический метод GetUnderlyingType. Например:

using System;
class Sample
{
    enum DaysOfWeek:ushort{Ponedelnik,Vtornik,Sreda,Chetverg,
Pyatnica,Subbota,Voskresenie}; static void Main() { try { Console.WriteLine(Enum.GetUnderlyingType(typeof(DaysOfWeek))); } catch(Exception ex) { Console.WriteLine(ex.Message); } Console.Read(); } }

На экране:

System.UInt16

Для того чтобы ознакомиться со всеми оставшимися методами класса - перечисления вам нужно обратиться в MSDN.


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru