Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1447 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Лекция 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. Ввожу код на сайте, пишет:

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

 

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