Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1447 / 157 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Лекция 4:

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

Базовый класс System.Enum для работы с перечислениями

Как только в приложении объявляется перечисление, тем самым неявно объявляется тип, производный от абстрактного класса System.Enum. Например, даже вот такой пустой код

internal enum MyEnum
{
}
    
internal class EntryPoint
{
    static void Main()
    {
    }
}

дает следующую диаграмму в панели Class View оболочки


Базовый класс System.Enum является абстрактным, поэтому не может напрямую иметь экземпляры (объекты), а может использоваться только как базовый в цепочке наследования. Тем не менее он определяет ряд статических методов, позволяющих обрабатывать созданные перечисления. Вот некоторые из этих методов.

Таблица 4.2 . Некоторые статические методы класса Enum
Метод Описание
public static string Format(System.Type enumType, object value, string format) Преобразует значение данного типа перечисления в эквивалентное строковое представление в соответствии с указанным форматом
public static string GetName(System.Type enumType, object value) Возвращает имя для константы с указанным значением
public static string[] GetNames(System.Type enumType) Возвращает массив имен для константы с указанным значением
public static System.Type GetUnderlyingType(System.Type enumType) Возвращает численный тип данных, используемый для хранения значений данного перечисления
public static System.Array GetValues(System.Type enumType) Возвращает массив элементов указанного перечисления
public static bool IsDefined(System.Type enumType, object value) Возвращает флаг существования в указанном перечислении заданного элемента
public static object Parse(System.Type enumType, string value, bool ignoreCase) Упаковывает в объектную ссылку один или несколько элементов перечисления по их именам, заданным в строке
public static object Parse(System.Type enumType, string value) Упаковывает в объектную ссылку один или несколько элементов перечисления по их именам, заданным в строке

Приведем пример программы, использующей статические методы класса System.Enum.

using System;
    
namespace CHETKOB.Test
{
    internal enum Fruit // Фрукты
    {
        Apples = 102,     // Яблоки
        Plums = 12,      // Сливы
        Cherries = 50,   // Вишни
        Grapes = 11,     // Виноград
        Pears = 211      // Груши
    }
    
    internal class MyClass
    {
    static void Main()
    {
    // Настройка консоли
    Console.Title = "Методы библиотечного класса Enum";
    Console.ForegroundColor = ConsoleColor.White;
    Console.CursorVisible = false;
    
    // Анализируем перечисление Fruit
    Array fruitArray = Enum.GetValues(typeof(Fruit));
    Console.WriteLine("Определяем количество 
      членов перечисления:");
    Console.WriteLine("Перечисление содержит {0} 
      членов", fruitArray.Length);
    
    // Обходим все члены перечисления
    // и выводим пары "ключ-значение"
    Console.WriteLine("\nВыводим элементы перечисления:");
    foreach (Fruit fruit in fruitArray)
    {
    Console.Write("{0, -8} = {1, -3} ",// Количество знакомест
      fruit.ToString(),
      Enum.Format(typeof(Fruit), fruit, "D")); // Decimal - десятичный
    Console.WriteLine("(= 0x{0})",
      Enum.Format(typeof(Fruit), fruit, "X"));// Hex - шестнадцатиричный
    }
    
    // Ищем элемент по значению
    Console.WriteLine();
    Console.WriteLine("Ищем элемент по значению:");
    foreach (Fruit fruit in fruitArray)
      {
      int value = (int)fruit;
      Console.WriteLine("Значение {0, -3} 
          имеет элемент {1}", value,
        Enum.GetName(typeof(Fruit), value));
      }
    
    // Проверяем, есть ли элемент в указанном перечислении
    Console.WriteLine();
    Console.WriteLine("Проверяем существование 
      элемента в перечислении:");
    string element = "Apples";
    if (Enum.IsDefined(typeof(Fruit), element))
      Console.WriteLine("Элемент {0} в 
        перечислении есть", element);
    else
      Console.WriteLine("Элемента {0} в 
        перечислении нет", element);
    
    // Печатаем еще одно перечисление
    Console.WriteLine();
    Console.WriteLine("Печатаем еще одно перечисление:");
    Type weekdays = typeof(Days);
    foreach (string str in Enum.GetNames(weekdays))
      Console.WriteLine("{0,-11} = {1}", 
        str,// Резервирует 11 знакомест 
    Enum.Format(weekdays, Enum.Parse(weekdays, str), "d"));
    
    Console.ReadLine();
    }
    
    // Перечисление в классе. Доступ из других класов
    // сборки будет составным: MyClass.Days 
    internal enum Days
    {
    Понедельник, Вторник, Среда, Четверг,
    Пятница, Суббота, Воскресенье
    };
    }
}
Листинг 4.12. Использование статических методов класса Enum

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

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

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

 

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