• Добро пожаловать на сайт - Forumteam.digital !

    Что бы просматривать темы форума необходимо зарегестрироваться или войти в свой аккаунт.

    Группа в телеграме (подпишитесь, что бы не потерять нас) - ForumTeam Chat [Подписатся]
    Связь с администратором - @ftmadmin

24. Изучаем перечисления.

Redman

<FORUMTEAM>
Команда форума
Регистрация
13.11.17
Сообщения
13.340
Реакции
8.377
Баллы
1.200
FTC
208¢
Перечисления.
С понятием перечисления вы уже встречались и знакомы... Нет, нет, не в прошлой жизни, а в курсе языка программирования “Си” вы познали его. Несмотря на этот радостный и знаменательный факт не будем предаваться сладким воспоминаниям о днях минувших, а вспомним, что это такое ещё раз и рассмотрим его в аспекте “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 появляется на экране, так как 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();
    }
}

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