- •1. Введение в ооп
- •1.1. Этапы развития технологий программирования
- •1.2. Введение в ооп
- •2. Понятие класса и объекта класса. Инкапсуляция в c#
- •2.1. Понятие класса и объекта класса. Создание объектов. Данные и методы класса
- •2.2. Передача параметров в методы класса
- •2.3. Конструкторы и деструкторы
- •2.4. Инкапсуляция в c#
- •3. Индексаторы и свойства
- •3.1. Индексаторы
- •3.2. Свойства
- •4. Наследование в c#
- •5. Полиморфизм в c#. Интерфейсы
- •5.1. Виртуальные методы и их переопределение
- •5.2. Применение абстрактных классов
- •5.3. Интерфейсы
- •6. Система типов языка c#
- •7. Структуры и перечисления
- •7.2. Тип структур
- •8. Операторы и управляющие конструкции языка c#
- •8.1. Арифметические операторы
- •8.2. Операторы отношения и логические операторы
- •8.3. Оператор присваивания
- •8.4. Оператор ?
- •8.5. Управляющие операторы
- •9. Массивы и строки
- •9.1. Массивы в c#
- •9.1.1. Одномерные массивы
- •9.1.2. Многомерные массивы
- •9.1.3. Ступенчатые массивы
- •9.2. Строки
- •9.2.1. Постоянство строк
- •10. Платформа .Net. Основные понятия и принципы работы
- •11. Пространства имен. Сборки
- •11.1. Пространства имён
- •11.2. Сборки
- •12. Время жизни переменных и область видимости переменных. Оператор new и сборка мусора
- •12.2. Финализация объектов
- •12.3. Создание высвобождаемых объектов
- •13. Исключения. Генерация и обработка
- •13.1. Основы обработки исключительных ситуаций
- •13.2. Применение пары ключевых слов try и catch
- •13.3. Генерирование исключений вручную
- •13.4. Использование блока finally
- •13.5. Класс Exception и получение производных классов
- •13.6. Ключевые слова checked и unchecked
- •14. Обобщения (шаблоны) и их применение в языке c#
- •15. Основные классы коллекций объектов
- •15.1. Интерфейсы необобщенных коллекций
- •15.1.1. Интерфейс iCollection
- •15.1.2. Интерфейс iList
- •15.1.3. Интерфейс iDictionary
- •16. Использование linq для работы с коллекциями
- •16.1. Простой запрос
- •16.2. Общая форма запроса
- •16.3. Сортировка результатов запроса с помощью оператора orderby
- •16.4 Операторы group, into, let и join
- •16.5. Методы запроса
- •16.6. Формирование запроса с помощью методов запроса
- •Заключение
- •Оглавление
- •1. Введение в ооп 3
- •1.1. Этапы развития технологий программирования 3
- •1.2. Введение в ооп 11
- •394026 Воронеж, Московский просп., 14
7. Структуры и перечисления
7.1. Тип enum
При построении той или иной системы зачастую удобно создавать набор символических имен, которые отображаются на известные числовые значения. Например, может понадобиться ссылаться на цвета определенного типа (Colors) с помощью таких констант, как Red (красный), Blue (синий), Yellow (жёлтый) и Green (зелёный). Для этой цели в С# поддерживается понятие специальных перечислений. Например, ниже показано специальное перечисление по имени Colors:
// Специальное перечисление.
enum Сolors
{
Red, // = О
Green, // = 1
Blue, // = 2
Yellow // = 3
}
В перечислении Colors определены четыре именованных константы, которые соответствуют дискретным числовым значениям. По умолчанию первому элементу присваивается значение 0, а всем остальным элементам значения присваиваются согласно схеме n+1. При желании исходное значение можно изменять как угодно. Нумерация в перечислениях вовсе не обязательно должна быть последовательной и содержать только уникальные значения.
По умолчанию для хранения значений перечисления используется тип System.Int32 (который в С# называется просто int); однако при желании его легко заменить. Перечисления в С# можно определять аналогичным образом для любых других ключевых системных типов (byte, short, int или long). Например, чтобы сделать для перечисления EmpType базовым тип byte, а не int, напишите следующий код:
//На этот раз Colors отображается на тип byte.
enum Colors : byte
{
Red = 10,
Green = 1,
Blue = 100,
Yellow = 9
}
Изменять базовый тип перечислений удобно в случае создания таких приложений .NET, которые будут развертываться на устройствах с небольшим объемом памяти (таких как поддерживающие .NET сотовые телефоны или устройства PDA), чтобы экономить память везде, где только возможно. Естественно, если для перечисления в качестве базового типа указан byte, каждое значение в этом перечислении ни в коем случае не должно выходить за рамки диапазона его допустимых значений.
Поскольку перечисления представляют собой не более чем просто определяемый пользователем тип данных, их можно применять в качестве возвращаемых функциями значений, параметров методов, локальных переменных и т.д.
При присваивании значения переменной перечисления перед значением должно обязательно указываться имя перечисления. Из-за того, что перечисления представляют собой фиксированные наборы пар "имя/значение", устанавливать для переменной перечисления значение, которое не определено напрямую в перечисляемом типе, не допускается.
Интересный аспект перечислений в .NET связан с тем, что функциональность они получают от типа класса System.Enum. В этом классе предлагается набор методов, которые позволяют опрашивать и преобразовывать заданное перечисление. Одним из наиболее полезных среди них является метод Enum.GetUnderlyingType(), который возвращает тип данных, используемый для хранения значений перечислимого типа.
Помимо метода Enum.GetUnderlyingType (), все перечисления С# также поддерживают метод по имени ToStringO, который возвращает имя текущего значения перечисления в виде строки. Ниже приведен соответствующий пример кода:
static void Main(string [ ] args)
{
Console.WriteLine ("**** Fun with Enums *****");
EmpType emp = EmpType.Contractor;
// Выводит строку "emp is a Contractor".
Console.WriteLine("emp is a {0}.", emp.ToString());
Console.ReadLine() ;
}
Чтобы выяснить не имя, а значение определенной переменной перечисления, можно просто привести ее к лежащему в основе типу хранения. Ниже показан пример, как это делается:
static void Main(string[] args)
{
Console.WriteLine("**** Fun with Enums *****");
EmpType emp = EmpType.Contractor;
// Выводит строку "Contractor = 100".
Console.WriteLine("{0} = {1}", emp.ToString() , (byte)emp);
Console.ReadLine();
}