この記事では、.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 名前空間に、数値に似た型と、それらに使用できる機能を記述するジェネリック インターフェイスが導入されています。 .NET 基本クラス ライブラリが提供する 20 個の数値型 ( Int32 や Doubleなど) は、これらのインターフェイスを実装するように更新されています。 これらのインターフェイスの中で最も顕著なのは INumber<TSelf>であり、これは大まかに「実数」に相当します。
これらのインターフェイスの詳細については、「 一般的な数学」を参照してください。
こちらも参照ください
.NET