Универсальные интерфейсы
Обновлен: Ноябрь 2007
В этом разделе содержатся общие сведения об универсальных интерфейсах, обеспечивающих общие функциональные возможности для различных семейств универсальных типов.
Универсальные интерфейсы
Универсальные интерфейсы — это строго типизированные аналоги неуниверсальных интерфейсов, предназначенные для сортировки и сравнения на равенство, а также для реализации функциональности, совместно используемой универсальными коллекциями.
Сортировка и сравнение на равенство
Как и у их неуниверсальных аналогов, у универсальных интерфейсов System.IComparable<T> и System.IEquatable<T> из пространства имен System определены, соответственно, методы для сортировки и сравнения на равенство. Типы реализуют эти интерфейсы для обеспечения возможности выполнения этих действий.
Универсальные интерфейсы IComparer<T> и IEqualityComparer<T> из пространства имен System.Collections.Generic предоставляют способ определения операции упорядочения или сравнения на равенство для типов, в которых не реализуются универсальные интерфейсы System.IComparable<T> или System.IEquatable<T>, а также дают возможность переопределения этих отношений тем типам, которые реализуют эти интерфейсы. Эти интерфейсы используются методами и конструкторами многих универсальных классов коллекций. К примеру, конструктору класса SortedDictionary<TKey, TValue> можно передать универсальный объект IComparer<T>, чтобы указать порядок сортировки для типа, в котором не реализован универсальный интерфейс System.IComparable<T>. Существуют перегрузки универсального статического метода Array.Sort и метода экземпляра List<T>.Sort, предназначенные для сортировки массивов и списков с помощью реализаций универсального интерфейса IComparer<T>.
Универсальные классы Comparer<T> и EqualityComparer<T> являются базовыми для реализаций универсальных интерфейсов IComparer<T> и IEqualityComparer<T>; эти классы предоставляют методы сортировки и сравнения на равенство по умолчанию через соответствующие свойства Comparer<T>.Default и EqualityComparer<T>.Default.
Функциональность коллекций
Универсальный интерфейс ICollection<T> является базовым для универсальных типов коллекций. В нем предоставляются основные функциональные возможности для добавления, удаления, копирования и перечисления элементов. Интерфейс ICollection<T> наследует от универсального интерфейса IEnumerable<T> и неуниверсального интерфейса IEnumerable.
Универсальный интерфейс IList<T> дополняет универсальный интерфейс ICollection<T> методами для получения элементов по индексу.
Универсальный интерфейс IDictionary<TKey, TValue> дополняет универсальный интерфейс ICollection<T> методами для получения элементов по ключу. Универсальные типы словарей в библиотеке базовых классов .NET Framework также реализуют неуниверсальный интерфейс IDictionary.
Универсальный интерфейс IEnumerable<T> формирует универсальную структуру перечислителя. Универсальный интерфейс IEnumerator<T>, реализуемый универсальными перечислителями, наследует от неуниверсального интерфейса IEnumerator; его члены MoveNext и Reset, не зависящие от параметра типа T, присутствуют только в неуниверсальном интерфейсе. Это означает, что любой потребитель неуниверсального интерфейса также может использовать универсальный интерфейс.
См. также
Основные понятия
Общие сведения об универсальных шаблонах в .NET Framework
Универсальные коллекции в .NET Framework
Универсальные делегаты для управления массивами и списками
Преимущества и ограничения универсальных шаблонов
Ссылки
System.Collections.ObjectModel