Опубликован: 25.03.2010 | Уровень: для всех | Доступ: платный
Лекция 4:

Типы данных C#

Перечисления (перечни)

Перечисления ( enumerations ) относятся к значимому типу данных. Они представляют собой набор именованных целочисленных констант, по умолчанию заданных типом Int32. Синтаксис объявления перечисления следующий:

модификатор_доступа enum имя_типа{список_членов}

Список членов представляет собой список идентификаторов, разделенных запятыми. Модификатор доступа по умолчанию является internal - в пределах сборки. Для использования во внешней сборке нужно объявлять public (как и классы).

using System;
    
namespace Test
{
    // Значимый тип, данные размещаются в стеке
    enum Fruit  // Фрукты
    {
        Apples,     // Яблоки
        Plums,      // Сливы
        Cherries,   // Вишни
        Grapes,     // Виноград
        Pears       // Груши
    }
    
    // Класс с функцией Main не может иметь экземпляр
    // Поэтому все функции в этом классе должны быть статическими
    class EntryPoint
    {
        static void Main()
        {
            // Настройка консоли
            Console.Title = "Использование перечислений";
            Console.ForegroundColor = ConsoleColor.White;
            Console.CursorVisible = false;
    
            string[] colorFruit = { // Массив цветов
                "Красный",
                "Синий",
                "Вишневый",
                "Зеленый",
                "Черный"
            };
    
            string[] nameFruit = {  // Массив имен
                "Яблоки",
                "Сливы",
                "Вишни",
                "Виноград",
                "Груши"
            };
    
            // Объявляем переменную перечислимого типа
            Fruit fruit;
    
            // Используем переменную перечисления для обхода всех членов
            for (fruit = Fruit.Apples; fruit <= Fruit.Pears; fruit++)
                Console.WriteLine(fruit + " имеет 
                  значение " + (int)fruit);
    
            // Используем переменную перечисления для индексации массива
            Console.WriteLine();// Прогон строки
            for (fruit = Fruit.Apples; fruit <= Fruit.Pears; fruit++)
                Console.WriteLine("Цвет фрукта " + fruit 
                    + " (" + nameFruit[(int)fruit] + 
                    ") - " + colorFruit[(int)fruit]);
    
            Console.ReadLine();// Для задержки окна
        }
    }
}
Листинг 4.8. Применение типа перечислений

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

enum Fruit  // Фрукты
    {
        Apples,         // = 0
        Plums,          // = 1
        Cherries = 100,
        Grapes,         // = 101
        Pears           // = 102
    }

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

enum Fruit  // Фрукты
    {
        Apples = 21,       
        Plums = 101,         
        Cherries = 100, 
        Grapes = 12,
        //Grapes = 3,
        Pears = 12 
    }

Управление объемом памяти элементов перечисления

Элементы перечисления, как значимого типа, загружаются в стек потока, и каждый по умолчанию имеет тип Int3 2 и занимает 4 байта. Ситуацию можно изменить, задав другой целочисленный тип (например, byte ) для всех элементов перечисления по следующему синтаксису

enum Fruit : byte  // Фрукты
    {
        Apples = 21,       
        Plums = 101,         
        Cherries = 100, 
        Grapes = 12,
        Pears = 2 
    }
using System;
    
namespace Test
{
    enum Fruit  // Фрукты
    {
        Apples,
        Plums,
        Cherries,
        Grapes,
        Pears
    }
    
    enum Fruit1 : byte  // Фрукты
    {
        Apples,
        Plums,
        Cherries,
        Grapes,
        Pears
    }
    
    enum Fruit2 : long  // Фрукты
    {
        Apples,
        Plums,
        Cherries,
        Grapes,
        Pears
    }
        
    class EntryPoint
    {
        static void Main()
        {
            // Настройка консоли
            Console.Title = "Использование перечислений";
            Console.ForegroundColor = ConsoleColor.White;
            Console.CursorVisible = false;
    
            Console.WriteLine("Члены Fruit имеют размер по "
                + sizeof(Fruit) + " байта");
            Console.WriteLine("Члены Fruit1 имеют размер по "
                + sizeof(Fruit1) + " байту");
            Console.WriteLine("Члены Fruit2 имеют размер по "
                + sizeof(Fruit2) + " байт");
   
            Console.ReadLine();// Для задержки окна
        }
    }
}
Листинг 4.9. Перечисления разной разрядности

Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

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

 

Как активировать код?

Денис Пашков
Денис Пашков
Россия
Татьяна Ковалюк
Татьяна Ковалюк
Украина, Киев, Киевский политехнический институт, 1974