В интерфейсе IDictionary
определяется такое поведение необобщенной коллекции, которое позволяет преобразовать уникальные ключи в соответствующие значения. Ключ представляет собой объект, с помощью которого значение извлекается впоследствии. Следовательно, в коллекции, реализующей интерфейс IDictionary
, хранятся пары "ключ-значение". Как только подобная пара будет сохранена, ее можно извлечь с помощью ключа. Интерфейс IDictionary
наследует от интерфейсов ICollection
и IEnumerable
. Методы, объявленные в интерфейсе IDictionary
, сведены в табл. 25.3. Некоторые из них генерируют исключение ArgumentNullException при попытке указать пустой ключ, поскольку пустые ключи не допускаются.
Таблица 25.3. Методы, определенные в интерфейсе IDictionary
Метод - Описание
void Add(object
void Clear() - Удаляет все пары “ключ-значение” из вызывающей коллекции
bool Contains(object
IDictionaryEnumerator GetEnumerator() - Возвращает перечислитель для вызывающей коллекции
void Remove(object
Для добавления пары "ключ-значение" в коллекцию типа IDictionary
служит метод Add()
. Обратите внимание на то, что ключ и его значение указываются отдельно. А для удаления элемента из коллекции следует указать ключ этого объекта при вызове метода Remove()
. И для опорожнения коллекции вызывается метод Clear()
.
Для того чтобы выяснить, содержит ли коллекция конкретный объект, вызывается метод Contains()
с указанным ключом искомого элемента. С помощью метода GetEnumerator()
получается перечислитель, совместимый с коллекцией типа IDictionary
. Этот перечислитель оперирует парами "ключ-значение".
В интерфейсе IDictionary
определяются перечисленные ниже свойства.
Свойство - Назначение
bool IsFixedSize { get; } - Принимает логическое значение true, если словарь имеет фиксированный размер
bool IsReadOnly { get; } - Принимает логическое значение true, если словарь доступен только для чтения
ICollection Keys { get; } - Получает коллекцию ключей
ICollection Values { get; } - Получает коллекцию значений
Следует иметь в виду, что ключи и значения, содержащиеся в коллекции, доступны в отдельных списках с помощью свойств Keys
и Values
.
Кроме того, в интерфейсе IDictionary
определяется следующий индексатор.
object this[object key] { get; set; }
Этот индексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Но в качестве индекса в данном случае служит ключ элемента, а не собственно индекс.
Интерфейс IEnumerable
является необобщенным, и поэтому он должен быть реализован в классе для поддержки перечислителей. Как пояснялось выше, интерфейс IEnumerable
реализуется во всех классах необобщенных коллекций, поскольку он наследуется интерфейсом ICollection
. Ниже приведен единственный метод GetEnumerator()
, определяемый в интерфейсе IEnumerable
.
IEnumerator GetEnumerator()
Он возвращает коллекцию. Благодаря реализации интерфейса IEnumerable
можно также получать содержимое коллекции в цикле foreach
.
В интерфейсе IEnumerator
определяются функции перечислителя. С помощью методов этого интерфейса можно циклически обращаться к содержимому коллекции. Если в коллекции содержатся пары "ключ-значение" (словари), то метод GetEnumerator()
возвращает объект типа IDictionaryEnumerator
, а не типа IEnumerator
. Интерфейс IDictionaryEnumerator
наследует от интерфейса IEnumerator
и вводит дополнительные функции, упрощающие перечисление словарей.
В интерфейсе IEnumerator
определяются также методы MoveNext()
и Reset()
и свойство Current
. Способы их применения подробнее описываются далее в этой главе. А до тех пор следует отметить, что свойство Current
содержит элемент, получаемый в текущий момент. Метод MoveNext()
осуществляет переход к следующему элементу коллекции, а метод Reset()
возобновляет перечисление с самого начала.