Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Пример 1. Параметризированные коллекции






Лабораторная работа № 12.

Параметризированные коллекции. Обработка исключительных ситуаций.

Цель. Получить практические навыки работы со стандартными коллекциями пространства имен System.Collection.Generic и с нестандартными исключениями, создаваемыми программистм.

Теоретические сведения

Параметризированные коллекции.

Во вторую версию библиотеки.NET добавлены параметризованные коллекции для представления основных структур данных, применяющихся при создании программ, — стека, очереди, списка, словаря и т. д. Эти коллекции, расположенные в пространстве имен System.Collections.Generic, дублируют аналогичные коллекции пространства имен System.Collections.

Параметризованные коллекции библиотеки.NET

Класс- прототип Обычный класс
Comparer < T> Comparer
Dictionary < K, T> HashTable
LinkedList < T> -
List < T> ArrayList
Queue< T> Queue
SortedDictionary < K, T> SortedList
Stack < T> Stack

Параметром класса-прототипа является тип данных, с которым он работает (T – это тип, который является параметром коллекции, т. е. вместо него можно подставить любой другой тип данных).

В коллекциях, которые мы рассматривали ранее, хранятся ссылки на объекты типа object. Когда значение структурного типа приводится к типу object (или к типу того интерфейса, который реализован системой) выполняется операция упаковки – явного преобразования из типа значений в тип ссылок. Эта операция выполняется автоматически и не требует вмешательства программиста. Обратной операцией является распаковка – значение объекта присваивается переменной.

У таких коллекций есть два недостатка:

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

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

Пример 1.

class Person: IComparable

{.... }

class Student: Person

{.... }

class Program

{

static void Main(string[] args)

{

List< Person> StudentGroup = new List< Person> (); //создали коллекцию

StudentGroup.Add(new Student(" Иванов", 18, 1, 4));

StudentGroup.Add(new Student(" Петров", 19, 2, 5));

StudentGroup.Add(new Student(" Сидоров", 21, 5, 4.5));

StudentGroup.Add(new Person(" Семенов", 23));

Console.WriteLine(" Студенческая группа");

foreach (Person x in StudentGroup)

x.Show();

List< int> Vector = new List< int> ();

Vector.Add(1);

Vector.Add(5);

Vector.Add(4);

Console.WriteLine(" \nВектор");

foreach (int y in Vector)

Console.Write(y + " ");

Console.WriteLine();

}

}

 

Коллекция StudentGroup содержит объекты пользовательских классов иерархии классов Person-> Student.

В коллекции, для которой объявлен тип элементов Person, благодаря полиморфизму можно хранить элементы любого производного класса, но не элементы других типов.

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

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

Коллекция Vector состоит из целых чисел, причем для работы с ними не требуются ни операции упаковки и распаковки, ни явные преобразования типа при получении элемента из коллекции, как это было в обычных коллекциях.

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


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал