Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
40.doc
Скачиваний:
14
Добавлен:
30.04.2022
Размер:
646.66 Кб
Скачать

15.1. Интерфейсы необобщенных коллекций

В пространстве имен System.Collections определен целый ряд интерфейсов необобщенных коллекций. Начинать рассмотрение необобщенных коллекций следует именно с интерфейсов, поскольку они определяют функциональные возможности, которые являются общими для всех классов необобщенных коллекций. Интерфейсы, служащие опорой для необобщенных коллекций, сведены в табл. 5.

Таблица 5

Интерфейсы необобщенных коллекций

Интерфейс

Описание

iCollection

Определяет элементы, которые должны иметь все необобщенные коллекции

iComparer

Определяет метод Compare () для сравнения объектов, хранящихся в коллекции

iDictionary

Определяет коллекцию, состоящую из пар "ключ-значение"

IDictionaryEnumerator

Определяет перечислитель для коллекции, реализующей интерфейс IDictionary

IEnumerable

Определяет метод GetEnumerator(), предоставляющий перечислитель для любого класса коллекции

IEnumerator

Предоставляет методы, позволяющие получать содержимое коллекции по очереди

iEqualityComparer

Сравнивает два объекта на предмет равенства

iList

Определяет коллекцию, доступ к которой можно получить с помощью индексатора

iStructuralComparable

Определяет метод CompareTo (), применяемый для структурного сравнения

iStructuralEquatable

Определяет метод Equals(), применяемый для выяснения структурного, а не ссылочного равенства. Кроме того, определяет метод GetHashCode ()

Далее будут рассмотрены интерфейсы ICollection и IDictionary.

15.1.1. Интерфейс iCollection

Интерфейс ICollection служит основанием, на котором построены все необобщенные коллекции. В нем объявляются основные методы и свойства для всех необобщенных коллекций. Он также наследует от интерфейса IEnumerable.

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

В интерфейсе ICollection определяется следующий метод.

void CopyTo(Array target, int startIdx)

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

Благодаря тому что интерфейс ICollection наследует от интерфейса IEnumerable, в его состав входит также единственный метод, определенный в интерфейсе IEnumerable. Это метод GetEnumerator (), объявляемый следующим образом.

IEnumerator GetEnumerator()

Он возвращает перечислитель для коллекции.

15.1.2. Интерфейс iList

В интерфейсе IList объявляется такое поведение необобщенной коллекции, которое позволяет осуществлять доступ к ее элементам по индексу с отсчетом от нуля.

Этот интерфейс наследует от интерфейсов ICollection и IEnumerable. Помимо методов, определенных в этих интерфейсах, в интерфейсе IList определяется ряд собственных методов. В некоторых из них предусматривается модификация коллекции. Если же коллекция доступна только для чтения или имеет фиксированный размер, то в этих методах генерируется исключение NotSupportedException.

Методы, определенные в IList:

1) int Add(object value) - добавляет объект value в вызывающую коллекцию. Возвращает индекс, по которому этот объект сохраняется.

2) void Clear() - удаляет все элементы из вызывающей коллекции

3) bool Contains(object value) - возвращает логическое значение true, если вызывающая коллекция содержит объект value, а иначе — логическое значение false.

4) int indexOf(object value) - возвращает индекс объекта value, если этот объект содержится в вызывающей коллекции. Если же объект value не обнаружен, то метод возвращает значение -1.

5) void Insert(int index, object value) - вставляет в вызывающую коллекцию объект value по индексу index. Элементы, находившиеся до этого по индексу index и дальше, смещаются вперед, чтобы освободить место для вставляемого объекта value;

6) void Remove(object value) - удаляет первое вхождение объекта value в вызывающей коллекции. Элементы, находившиеся до этого за удаленным элементом, смещаются назад, чтобы устранить образовавшийся "пробел";

7) void RemoveAt(int index) - удаляет из вызывающей коллекции объект, расположенный по указанному индексу index. Элементы, находившиеся до этого за удаленным элементом, смещаются назад, чтобы устранить образовавшийся "пробел".

Объекты добавляются в коллекцию типа iList вызовом метода Add(), который принимает аргумент типа object. А поскольку object является базовым классом для всех типов, то в необобщенной коллекции может быть сохранен объект любого типа, включая и типы значений.

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

bool IsFixedSize { get; }

bool IsReadOnly { get; }

Если коллекция имеет фиксированный размер, то свойство IsFixedSize содержит логическое значение true. Это означает, что в такую коллекцию нельзя ни вставлять элементы, ни удалять их из нее. Если же коллекция доступна только для чтения, то свойство IsReadOnly содержит логическое значение true. Это означает, что содержимое такой коллекции не подлежит изменению.

Кроме того, в интерфейсе IList определяется следующий индексатор.

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

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

Пример:

using System;

using System.Collections;

using System.Collections.Generic;

using System.Collections.ObjectModel;

using System.Text;

public class MainClass

{

public static void Main()

{

IList<double> myList = new List<double>();

myList.Add(10.5);

myList.Add(209.224);

myList.Insert(1, 3.999);

myList.Add(48.2);

myList.Remove(10.4);

Console.WriteLine("IndexOf {0} = {1}", 209.2234,

myList.IndexOf(209.2234));

Console.WriteLine("IndexOf {0} = {1}", 10.54, myList.IndexOf(10.54));

}

}

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