Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kompyuternye_tekhnologii_C.doc
Скачиваний:
7
Добавлен:
01.02.2015
Размер:
368.64 Кб
Скачать

8.Структуры (доделать)

В языке C# есть типы данных – структуры, похожие на классы, доступ к

которым осуществляется непосредственно (как к простым типам значений), а не по ссылке (как к экземплярам классов, массивам и строкам). Структура описывается служебным словом struct. Структуры, как и все типы данных наследуют класс object.

Структуры:

  • копируются при присваивании;

  • не могут наследовать в другие структуры и классы;

  • могут содержать методы, поля, индексаторы, свойства, операторные методы и

события;

  • допускают использование конструкторов, используемых для инициализации

данных, но не конструкторы по умолчанию (без параметров), конструктор по

умолчанию определяется автоматически, и его нельзя изменить;

  • позволяют использовать вызов конструктора с оператором new для

инициализации, без вызова конструктора объект создаётся, но его нужно

инициализировать вручную;6 допускают значение NULL.

Структуры можно использовать вместо простых классов, не требующих

наследования. Довольно часто структуры применяют без методов для хранения

данных, аналогично записям в других языках программирования. Запись –

именованный набор разнотипных данных, называемых полями, доступ к которым

осуществляется по имени поля, отделѐнного от имени переменной (экземпляра)

структуры точкой. Удобство использования записей (структур) обусловлено тем, что

такой набор данных соответствует полям заполняемых бланков и является кортежем

(строкой таблицы, набором атрибутов, экземпляром сущности) при использовании в

базах данных. Для использования доступа к полям снаружи структуры, члены

структуры необходимо описывать с модификатором доступа public. Структуры

можно организовывать в массивы и коллекции.

using System;

struct Stud

{

public string Name, Group, Addr, PhoneNum;

public DateTime BirthDate, EntryDate;

public double CurrentAverageScore;

public Stud(string n, string g, string a, string p,

DateTime b, DateTime e, double c)

{

Name = n; Group = g; Addr = a;

PhoneNum = p; BirthDate = b;

EntryDate = e; CurrentAverageScore = c;

}

}

class P10_1

{

static void Main()

{

Stud[] X = new Stud[30];

X[0].Name = "Сидоров Петр Иванович";

X[0].Group = "ИТ-30";

X[0].BirthDate = new DateTime(1992, 9, 1);

Console.WriteLine(X[0].Group);

DateTime TD = DateTime.Today;

int Y = TD.Year - X[0].BirthDate.Year;

if (X[0].BirthDate > TD.AddYears(-Y)) Y--;

Console.WriteLine("{0}, {1} лет", X[0].Name, Y);

X[1] = new Stud("Николаенко Олег Михайлович",

"ИТ-30", "ул.Петровского 3,8", "7771234",

new DateTime(1992, 5, 28),

new DateTime(2011, 7, 15), 4.3);

Y = TD.Year - X[1].BirthDate.Year;

if (X[1].BirthDate > TD.AddYears(-Y)) Y--;

Console.WriteLine("{0}, {1} лет", X[1].Name, Y);

}

}

В программе PEXS описан тип структуры Stud, имеющий строковые поля

имени, группы, адреса и номера телефона, поля даты рождения и даты поступления, а также текущий средний бал успеваемости. У структуры присутствует конструктор, инициализирующий списком все поля.

Перечесления

Перечисление – множество именованных целочисленных констант, объявляется

с помощью ключевого слова enum. Формат записи:

enum имя {список};

где имя – имя типа перечисления, список – список идентификаторов,

разделяемых запятыми. Создаётся список констант, имеющих целый

порядковый номер, который можно получить с помощью явного приведения типов

: (int)идентификатор_списка.

using System;

class Pexs2

{

enum Colors

{

Black, Blue, Green, Cyan, Red, Magenta, Brown, White,

Gray, LtBlue, LtGreen, LtCyan, LtRed, LtMagenta,

Yellow, LtWhite

}

static void Main()

{

string[] NColors = {"Чёрный", "Синий", "Зелёный", "Циан",

"Красный", "Малиновый","Коричневый", "Белый", "Серый",

"Св.Синий", "Св.Зелёный", "Св.Циан", "Св.Красный","Св.Малиновый", "Жёлтый", "Ярк.Берый"};

for (Colors i = Colors.Black; i <= Colors.LtWhite; ++i)

Console.WriteLine("{0,2} {1,10} {2,12}",

(int)i, i, NColors[(int)i]);

}

}

В программе приводится пример перечисления Colors. В программе задан строковый массив с описанием цветов. В цикле, где счётчиком цикла является

переменная i перечислимого типа Colors, выводится на консоль список порядкового номера цвета, имя текущего элемента списка перечисления и элемент строкового массива в качестве описания текущего цвета. В строке формата кроме номера параметра через запятую указывается размер поля, что формирует таблицу. Так как размер поля положительный, выравнивание в поле производится по правому краю. Замените размер поля у первого и второго параметров отрицательными значениями, запустите и сравните результаты

По умолчанию номер каждого следующего элемента списка перечисления

больше предыдущего на единицу. Нумерация начинается с нуля. Внутри списка у

любого элемента можно указать через равно целое число – номер больший, чем номер по умолчанию.

Следующая запись начнёт нумерацию с двух, а не с нуля:

enum Colors

{

Black = 2, Blue, Green, Cyan, Red, Magenta, Brown, White,

Gray, LtBlue, LtGreen, LtCyan, LtRed, LtMagenta,

Yellow, LtWhite

}

все последующие после Black элементы будут также иметь номер на единицу

больше предыдущег

Коллекции

При создании реальных проектов возникают ситуации, когда невозможно

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

В .NET Framework поддерживаются пять типов коллекций:

  • необобщенные;

  • специальные;

  • с поразрядной организацией;

  • обобщенные;

  • параллельные.

Необобщённые коллекции (в пространстве имён System.Collections) реализуют

такие классы как динамический массив (ArrayList) – массив с динамическим

увеличением размера до нужного значения, очередь (Queue) – коллекция,

обслуживающая объекты по принципу «первым поступил – первым обслужен», стек (Stack) – неуниверсальная коллекция, обслуживающая объекты по принципу

«последним пришёл – первым ушёл», словари – коллекции пар «ключ-значение».

Необобщённые коллекции оперируют данными типа object (хранят ссылки),

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

Специальные коллекции (System.Collections.Specialized) оперируют данными

конкретного типа или же делают это каким то особым образом. Примером могут

служить коллекции строк StringCollection.

Поразрядные коллекции (System.Collections) поддерживают операции над

отдельными двоичными разрядами (И, ИЛИ, Исключающее ИЛИ...). Представлены

одной коллекцией BitArray.

Обобщённые коллекции (System.Collections.Generic) являются типизированными и обеспечивают обобщённую реализацию нескольких стандартных структур данных, включая связанные списки, стеки, очереди и словари. Такие коллекции (Dictionary, LinkedList, List, Queue, SortedDictionary, SortedList, SortedSet, SynchronizedCollection)

являются типизированными, что исключает случайное несовпадение типов.

Параллельные коллекции (System.Collections.Concurrent) – обобщѐнные

коллекции, поддерживающие многопоточный доступ.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]