本文概述了 .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型接口;MoveNextReset不依赖于类型参数
T
的成员仅显示在非泛型接口上。 这意味着,非泛型接口的任何使用者也可以使用泛型接口。
数学功能
.NET 7 在命名空间中 System.Numerics 引入了泛型接口,这些接口描述了类似数字的类型及其可用的功能。 .NET 基类库提供的 20 种数值类型(例如, Int32 并且 Double)已更新为实现这些接口。 这些接口中最突出的是 INumber<TSelf>,它大致对应于一个“实数”。
有关这些接口的详细信息,请参阅 泛型数学。