Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье представлен обзор универсальных интерфейсов .NET, которые обеспечивают общие функциональные возможности для семейств универсальных типов.
Универсальные интерфейсы предоставляют типобезопасные альтернативы негенерическим интерфейсам для сравнения порядка и равенства, а также обеспечивают функциональность, общую для типовых коллекций. В .NET 7 представлены универсальные интерфейсы для типов, таких как число, например System.Numerics.INumber<TSelf>. Эти интерфейсы позволяют определять универсальные методы, предоставляющие математические функции, где параметр универсального типа ограничен типом, реализующим универсальный, числовой интерфейс.
Замечание
Параметры типа нескольких универсальных интерфейсов помечаются ковариантными или контравариантными, обеспечивая большую гибкость при назначении и использовании типов, реализующих эти интерфейсы. Дополнительные сведения см. в разделе Ковариантность и контравариантность.
Сравнения на равенство и упорядоченность
В пространстве имен System универсальные интерфейсы System.IComparable<T> и System.IEquatable<T>, как и их негенерические аналоги, соответственно определяют методы для сравнений упорядочивания и равенства. Типы реализуют эти интерфейсы, чтобы обеспечить возможность выполнения таких сравнений.
В пространстве имен System.Collections.Generic интерфейсы IComparer<T> и IEqualityComparer<T> предлагают способ определения упорядочивания или сравнения равенства для типов, которые не реализуют интерфейсы System.IComparable<T> или System.IEquatable<T>. Они также предоставляют способ переопределить эти отношения для типов, которые имеют такую возможность.
Эти интерфейсы используются методами и конструкторами многих универсальных классов коллекций. Например, можно передать универсальный IComparer<T> объект конструктору SortedDictionary<TKey,TValue> класса, чтобы указать порядок сортировки для типа, который не реализует универсальный 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 также реализуют негенерический IDictionary интерфейс.
Универсальный IEnumerable<T> интерфейс предоставляет универсальную структуру перечислителя. IEnumerator<T> Универсальный интерфейс, реализованный универсальными перечислителями, наследует негенерический IEnumerator интерфейс; MoveNext и Reset члены, которые не зависят от параметра
T
типа, отображаются только в негенерическом интерфейсе. Это означает, что любой потребитель негенерического интерфейса также может использовать универсальный интерфейс.
Математические функции
В .NET 7 представлены универсальные интерфейсы в System.Numerics пространстве имен, которое описывает числоподобные типы и функции, доступные для них. 20 числовых типов, которые предоставляет библиотека базовых классов .NET, например, Int32 и Doubleбыли обновлены для реализации этих интерфейсов. Наиболее заметным из этих интерфейсов является INumber<TSelf>, который примерно соответствует "вещественному" числу.
Дополнительные сведения об этих интерфейсах см. в разделе "Универсальная математика".