Этот индексатор служит для получения и установки значения элемента коллекции, а также для добавления в коллекцию нового элемента. Следует, однако, иметь в виду, что в качестве индекса в данном случае служит ключ элемента, а не сам индекс.
Интерфейсы IEnumerable и IEnumerator
ИнтерфейсыIEnumerableиIEnumeratorявляются обобщенными эквивалентами рассмотренных ранее необобщенных интерфейсовIEnumerableиIEnumerator.В них объявляются аналогичные методы и свойства, да и действуют они по тому же принципу. Разумеется, обобщенные интерфейсы оперируют данными только того типа, который указывается в аргументе типа.
В интерфейсеIEnumerableметодGetEnumerator объявляется следующим образом.
IEnumerator GetEnumerator
Этот метод возвращает перечислитель типаТдля коллекции. А это означает, что он возвращает типизированный перечислитель.
Кроме того, в интерфейсеIEnumerableопределяются два таких же метода, как и в необобщенном его варианте:MoveNext () иReset . В этом интерфейсе объявляется также обобщенный вариант свойстваCurrent.
Т Current { get; }
Это свойство возвращает ссылку типаТна следующий объект. А это означает, что обобщенный вариант свойстваCurrentявляется типизированным.
Но между интерфейсамиIEnumeratorиIEnumeratorимеется одно важное различие: интерфейсIEnumeratorнаследует от интерфейсаIDisposable,тогда как интерфейсIEnumeratorне наследует от него. В интерфейсеIDisposableопределяется методDispose , который служит для освобождения неуправляемых ресурсов.
ПРИМЕЧАНИЕ
В интерфейсе lEnumerable реализуется также необобщенный интерфейс IEnumerable. Это означает, что в нем поддерживается необобщенный вариант метода GetEnumerator . Кроме того, в интерфейсе lEnumerable реализуется необобщенный интерфейс IEnumerator, а следовательно, в нем поддерживаются необобщенные варианты свойства Current.
Интерфейс IComparer
ИнтерфейсIComparer<Т>является обобщенным вариантом рассмотренного ранее интерфейсаIComparer.Главное отличие между ними заключается в том, что интерфейсIComparerобеспечивает типовую безопасность. В нем обобщенный вариант методаCompare объявляется следующим образом.
int Compare(Т х, Т у)
В этом методе сравниваются объекты х и у. Он возвращает положительное значение, если значение объекта х больше, чем у объекта у; отрицательное — если значение объекта х меньше, чем у объекта у; и нулевое значение — если сравниваемые значения равны.
Интерфейс IEqualityComparer
ИнтерфейсIEqualityComparerполностью соответствует своему необобщенному аналогуEqualityComparer.В нем определяются два следующих метода.
bool Equals(Тх,Т у) int GetHashCode(Тobj)