.NET 中的泛型介面
本文概述提供泛型型別系列中常見功能的 .NET 泛型介面。
泛型介面提供非泛型介面的類型安全對應項目,以進行排序和相等比較,以及泛型集合類型的功能。 .NET 7 引進類似數字型別的泛型介面,例如 System.Numerics.INumber<TSelf>。 這些介面可讓您定義提供數學功能的泛型方法,其中泛型型別參數受限於實作泛型數值介面的類型。
注意
數個泛型介面的型別參數會標示共變數或反變數,提供更大彈性來指派和使用實作這些介面的類型。 如需詳細資訊,請參閱 Covariance and Contravariance (共變數和反變數 (C# 和 Visual Basic))。
相等和排序比較
在 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 命名空間中引進泛型介面,描述類似數字類型及其可用的功能。 .NET 基底類別庫提供的 20 個數值型別,例如 Int32 和 Double,已更新以實作這些介面。 這些介面中最顯著的是 INumber<TSelf>,其大致對應至「實際」數字。
如需這些介面的詳細資訊,請參閱泛型數學。