Интерфейс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
МетодEquals возвращает логическое значениеtrue,если значения объектов х иуравны. А методGetHashCode возвращает хеш-код для объекта
Интерфейсы IStructuralComparable и IStructuralEquatable
. Оба интерфейсаIStructuralComparableиIStructuralEquatableдобавлены в версию 4.0 среды .NET Framework. В интерфейсеIStructuralComparableопределяется методCompareTo , который задает способ структурного сравнения двух объектов для целей сортировки. (Иными словами, МетодCompareTo сравнивает содержимое объектов, а не ссылки на них.) Ниже приведена форма объявления данного метода.
int CompareTo(object