Лекция 6. Структуры и перечисления
План:
1.Структуры
2.Перечисления
Структуры
Структуры в C# практически ничем не отличаются от структур в любом другом языке. Отличия наблюдаются лишь на более низком уровне. В основном это касается того, что для структур в C# не существует базового класса. Но в то же время структуры являются производными от типа ValueType.
Структура – это набор зависимых друг от друга переменных. Зависимость здесь исключительно логическая и определяется условиями задачи.
Пример.
Программа, печатающая справки для студентов.
Все справки имеют один и тот же вид и текст, кроме следующих полей: ФИО, форма обучения, курс, факультет. Это зависимые данные и их можно представить в виде структуры, например так:
Наша структура называется STUDENT и имеет четыре поля. После того как структура объявлена, мы можем с ней работать.
static void Main(string[] args)
{
STUDENT stud;
stud.fio = "Нгуен Павел Зунгович";
stud.FormOfEducation = "очного";
stud.course = 3;
stud.faculty = "электроэнергетического";
Console.WriteLine("СПРАВКА подтверждает, что " + stud.fio + " является студентом " + stud.FormOfEducation + " отделения ВоГТУ " + stud.course + " курса " + stud.faculty + " факультета");
Console.Read();
}
Передавать такие данные удобно, т.к. они являются одним объектом. В частности можно передавать структуры в качестве параметров функциям. Усовершенствуем нашу программу, написав отдельную функцию для печатания справок:
static void print(STUDENT stud)
{
Console.WriteLine("СПРАВКА подтверждает, что "+stud.fio +
" является студентом " + stud.FormOfEducation + " отделения ВоГТУ " + stud.course+" курса " + stud.faculty + " факультета");
}
В качестве параметра мы передаем структуру типа STUDENT.
Кроме переменных структуры могут иметь конструкторы и методы. Правда для структур нельзя переопределить конструктор по умолчанию, т.е. тот, который не получает никаких параметров. Конструкторы структур ничем не отличаются от конструкторов классов, поэтому не будем разжевывать этот аспект, а лишь рассмотрим простой пример:
struct STUDENT
{
public string fio;
public string FormOfEducation;
public int course;
public string faculty;
public STUDENT (string name)
{
this.fio = name;
this.FormOfEducation = "Неопределено";
this.course = 0;
this.faculty = "Неопределено";
}
}
static void Main(string[] args)
{
STUDENT stud = new STUDENT("Нгуен Павел Зунгович");
print(stud);
Console.Read();
}
Перечисления
Как и массивы, перечисления являются экземпляром класса. В случае перечислений - это System.Enum.
Человек устроен таким образом, что ему легче запомнить слово, нежели последовательность цифр (хотя бывают и исключения). Именно по этой причине, кстати, люди и придумали языки программирования. Перечисления в C# применяются в соответствии с этим фактом. Перечисления - это подобие множеств. Это совокупность однотипных данных, которые имеют понятные человеку имена.
Вот пример простого перечисления:
enum EnumName{Pavel, Oleg, Anna, Gena};
В данном примере мы объявили перечисление EnumName, состоящее из четырех элементов. Каждый элемент имеет свой номер. В данном примере нумерация начинается с нуля, т.е. элемент Pavel имеет порядковый номер 0, Oleg - 1 и т.д. Можно задать и другую последовательность, например:
enum EnumName{Pavel = 3,Oleg = 2,Anna = 10,Gena = 5}
Комментарии, думаю излишне. Вообще для перечислений нумерация не так важна, как для массивов.
Кроме того, можно задать тип элементов перечисления. По умолчанию используется тип int, но можно назначить любой, например вот так:
enum EnumName : short { Pavel = 3, Oleg = 2, Anna = 10, Gena = 5 }
В данном примере все 4 элемента перечисления EnumName будут иметь тип short.
Использовать перечисления очень просто. К элементам объявленного нами перечисления можно обратиться так:
EnumName x;
x = EnumName.Pavel;
Console.WriteLine(x);
В данном случае на экран будет выведено "Pavel". Казалось бы, что от перечислений совсем нет толка, но на самом деле это не так. Дело в том, что перечисления имеют несколько полезных методов, которые помогают взаимодействовать с перечислениями, делая их более удобными для решения некоторых задач, нежели массивы.
Очень важным является метод GetValues(). Он возвращает экземпляр класса System.Array, т.е. массив. Рассмотрим это метод на простом примере:
Array mas = Enum.GetValues(typeof(EnumName));
foreach(EnumName y in mas)
Console.WriteLine(y);
В данном примере перечисление преобразуется в массив, а затем все элементы массива выводятся на экран. Нужно обратить внимание на то, что вся нумерация при этом сбивается.
Кроме GetValues() есть и другие полезные методы, например Format(), GetUnderlyingType() и другие. Кроме того, элементы перечислений можно сравнивать между собой, например:
EnumName.Pavel > EnumName.Oleg
В данном случае сравниваются номера элементов перечислений.
Перечисления являются удобным средством представления данных. Нужно уметь их применять, они позволят сделать исходный код более наглядным и понятным.
Контрольные вопросы:
1.Нужно ли при создании структуры пользоваться ключевым словом new?
2.Может ли для структуры определяться деструктор?
3.Что такое перечисление?
Дата добавления: 2015-10-26; просмотров: 1181;