ИнтерфейсIEnumerableявляется необобщенным, и поэтому он должен быть реализован в классе для поддержки перечислителей. Как пояснялось выше, интерфейсIEnumerableреализуется во всех классах необобщенных коллекций, поскольку он наследуется интерфейсомICollection.Ниже приведен единственный методGetEnumerator (), определяемый в интерфейсеIEnumerable.

IEnumerator GetEnumerator()

Он возвращает коллекцию. Благодаря реализации интерфейсаIEnumerableможно также получать содержимое коллекции в циклеforeach.

В интерфейсеIEnumeratorопределяются функции перечислителя. С помощью методов этого интерфейса можно циклически обращаться к содержимому коллекции. Если в коллекции содержатся пары "ключ-значение" (словари), то методGetEnumerator() возвращает объект типаIDictionaryEnumerator,а не типаIEnumerator.ИнтерфейсIDictionaryEnumeratorнаследует от интерфейсаIEnumeratorи вводит дополнительные функции, упрощающие перечисление словарей.

В интерфейсеIEnumeratorопределяются также методыMoveNext() иReset() и свойствоCurrent.Способы их применения подробнее описываются далее в этой главе. А до тех пор следует отметить, что свойствоCurrentсодержит элемент, получаемый в текущий момент. МетодMoveNext() осуществляет переход к следующему элементу коллекции, а методReset() возобновляет перечисление с самого начала.

Интерфейсы IComparer и IEqualityComparer

В интерфейсеIComparerопределяется методCompare() для сравнения двух объектов.

int Compare(object х, object у)

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

В интерфейсеIEqualityComparerопределяются два метода.

bool Equals(objectх,object у) int GetHashCode(objectobj)

МетодEquals() возвращает логическое значениеtrue,если значения объектов х иуравны. А методGetHashCode() возвращает хеш-код для объектаobj.

Интерфейсы IStructuralComparable и IStructuralEquatable

. Оба интерфейсаIStructuralComparableиIStructuralEquatableдобавлены в версию 4.0 среды .NET Framework. В интерфейсеIStructuralComparableопределяется методCompareTo (), который задает способ структурного сравнения двух объектов для целей сортировки. (Иными словами, МетодCompareTo() сравнивает содержимое объектов, а не ссылки на них.) Ниже приведена форма объявления данного метода.

int CompareTo(objectother,IComparercomparer)

Перейти на страницу:

Похожие книги