Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LR_2_Tekhnologia_programmirovania.docx
Скачиваний:
42
Добавлен:
20.03.2016
Размер:
131.42 Кб
Скачать

Лабораторная работа №2. Разработка приложений с использованием коллекций

1. Цель работы

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

2. Сведения из теории

2.1. Интерфейсы коллекций

В C# под коллекцией понимается группа объектов. Пространство имен System.Collections содержит множество интерфейсов и классов, которые определяют и реализуют коллекции различных типов (динамические массивы, стеки, очереди, словари, хеш-таблицы и т.п.).

Интерфейсы, которые поддерживают коллекции и их иерархия приведены на рисунке 2.1.

Рисунок 2.1. Иерархия интерфейсов System.Collections

Интерфейс ICollection можно назвать фундаментом, на котором построены все коллекции. В нем объявлены основные методы и свойства, без которых не может обойтись ни одна коллекция. Самое востребованное свойство этого интерфейса – Count, содержит количество элементов, хранимых в коллекции в данный момент. Если свойство Count равно нулю, значит, коллекция пуста. В интерфейсе ICollection определен следующий метод:

Void CopyTo(Array target, int startIdx)

Этот метод копирует содержимое коллекции в массив, заданный параметром target, начиная с индекса, заданного параметром startIdx. Можно сказать, что метод CopyTo() обеспечивает переход от коллекции к стандартному C#-массиву.

Интерфейс IList наследует интерфейс ICollection и определяет поведение коллекции, доступ к элементам которой разрешен посредством индекса с отсчетом от нуля. Помимо методов, определенных в интерфейсе ICollection, интерфейс IList определяет и собственные методы:

Метод

Описание

int Add(object obj)

Добавляет объект obj в вызывающую коллекцию. Возвращает индекс, по которому этот объект сохранен

void Clear()

Удаляет все элементы из вызывающей коллекции

bool Contains (object obj)

Возвращает true, если вызывающая коллекция содержит объект obj, иначе false

int IndexOf (object obj)

Возвращает индекс объекта obj, если он (объект) содержится в вызывающей коллекции, иначе возвращает –1

void Insert(int idx, object obj)

Вставляет в вызывающую коллекцию объект obj по индексу idx. Последующие элементы смещаются вперед, чтобы освободить место для вставляемого объекта

void Remove(object obj)

Удаляет из вызывающей коллекции первое вхождение объекта obj. Последующие элементы смещаются назад

void RemoveAt(int idx)

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

В интерфейсе IList определены следующие свойства:

bool IsFixedSize { get; } – равно true, если коллекция имеет фиксированный размер, т.е. в нее нельзя вставлять элементы и удалять их из нее.

bool IsReadOnly { get; } – равно true, если коллекция предназначена только для чтения, т.е. содержимое коллекции не подлежит изменению.

В интерфейсе IList определен следующий индексатор:

object this[int idx] { get; set; }

Этот индексатор можно использовать для считывания или записи значения нужного элемента (но не для добавления).

Интерфейс IDictionary определяет поведение коллекции, которая служит для хранения пар ключ/значение. Сохраненную однажды пару можно извлечь по заданному ключу. Интерфейс IDictionary наследует интерфейс ICollection. Методы, объявленные в интерфейсе IDictionary, сведены в таблице:

Метод

Описание

void Add(object k, object v)

Добавляет в вызывающую коллекцию пару ключ/значение, заданную параметрами k и v. Ключ k не должен быть нулевым. Если ключ k уже хранится в коллекции, генерируется исключение типа ArgumentException

void Clear()

Удаляет все пары ключ/значение из вызывающей коллекции

bool Contains(object k)

Возвращает true, если вызывающая коллекция содержит объект k в качестве ключа, иначе false

IDictionaryEnumerator GetEnumerator()

Возвращает нумератор для вызывающей коллекции

void Remove(object k)

Удаляет элемент с ключом k

В интерфейсе IDictionary определены следующие свойства:

Свойство

Описание

bool IsFixedSize {get; }

Равно true, если словарь имеет фиксированный размер

bool IsReadOnly { get; }

Равно true, если словарь предназначен только для чтения

ICollection Keys { get; }

Получает коллекцию ключей

ICollection Values { get; }

Получает коллекцию значений

В интерфейсе IDictionary определен следующий индексатор:

object this[object key] { get; set; }

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

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

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