次の方法で共有


IEquatable<T> インターフェイス

定義

インスタンスの等価性判断を目的とする型固有のメソッドを作成するために値型またはクラスで実装する、汎用のメソッドを定義します。

generic <typename T>
public interface class IEquatable
public interface IEquatable<T>
type IEquatable<'T> = interface
Public Interface IEquatable(Of T)

型パラメーター

T

比較するオブジェクトの型。

派生

メソッドの例を IEquatable<T>.Equals 参照してください。

注釈

このインターフェイスは、値を等しめることができる型 (数値クラスや文字列クラスなど) によって実装されます。 値の型またはクラスは、 メソッドを Equals 実装して、インスタンスの等価性を判断するのに適した型固有のメソッドを作成します。

注意

インターフェイスは IComparable<T> 、 メソッドを CompareTo 定義します。これにより、実装する型のインスタンスの並べ替え順序が決まります。 インターフェイスは IEquatable<T> 、 メソッドを Equals 定義し、実装する型のインスタンスの等価性を決定します。

インターフェイスはIEquatable<T>、 などのList<T>Dictionary<TKey,TValue>LinkedList<T>メソッドContainsIndexOfLastIndexOfRemoveの等価性をテストするときに、 などのジェネリック コレクション オブジェクトによって使用されます。 ジェネリック コレクションに格納される可能性のあるオブジェクトに対して実装する必要があります。

注意 (実装者)

インターフェイスの type パラメーターを、 IEquatable<T> このインターフェイスを実装している型に置き換えます。

を実装IEquatable<T>する場合は、 および の基底クラスのEquals(Object)GetHashCode()実装もオーバーライドして、その動作が メソッドの動作と一致するようにするEquals(T)必要があります。 をオーバーライド Equals(Object)する場合、オーバーライドされた実装は、クラスの静的 Equals(System.Object, System.Object) メソッドの呼び出しでも呼び出されます。 さらに、 演算子と op_Inequality 演算子をオーバーロードするop_Equality必要があります。 これにより、すべての等値テストで一貫した結果が返されることが保証されます。

Equals(Object)オーバーライドの詳細については、「」を参照してください Equals(Object)

値型の場合は、パフォーマンスを向上させるために常に を実装 IEquatable<T> してオーバーライド Equals(Object) する必要があります。 Equals(Object) は値型をボックス化し、2 つの値を比較して等しいかどうかをリフレクションに依存します。 の実装と のオーバーライドの Equals(T) 両方で Equals(Object) 、一貫した結果が返されます。

を実装 IEquatable<T>する場合は、型のインスタンスを順序付けまたは並べ替えできる場合も実装 IComparable<T> する必要があります。 型が を実装している場合は、 IComparable<T>ほとんどの場合 も を実装 IEquatable<T>します。

型が注文関係をサポートするデザインもありますが、等価性は順序関係とは異なる場合があることに注意してください。 アルファベット順に Person 並べ替えるクラスを考えてみましょう。 同じ名前の 2 人が同じ並べ替えを行いますが、同じ人物ではありません。

メソッド

Equals(T)

現在のオブジェクトが、同じ型の別のオブジェクトと等しいかどうかを示します。

適用対象

こちらもご覧ください