さまざまなタイプのオブジェクトが互いに同等であると報告することが役立つシナリオがいくつかあるかもしれませんが、そのような使用はしないことを強くお勧めします。おそらく正当化できると私が見ることができるのは、Equals
さまざまな仮想メソッドを使用する封印されたメソッドを含む共通の基本クラスから継承されたすべての型が、オブジェクトがサポートする迅速な等値比較の手段をオブジェクトに尋ね、利用可能な最良のものを使用する場合です。メソッドを使用し、迅速なメソッドが利用できない場合は、オブジェクトを正規の形式に変換して比較します。
たとえばImmutableFloatingPointMatrix
、2 つの引数のインデックス付きプロパティ ゲッターを実装する抽象型を考えてみましょう。2 つの行列は、サイズが同じで、同じ場所に同じ値がある場合、等しいと見なされます。派生クラスが 2 次元配列を使用して行列の内容を保持することは可能ですが、他の多くの格納方法も可能です。たとえばIdentityMatrix
、単一のSize
フィールドを持ち、その次元を常にSize
xとして報告Size
し、主対角線上のセルに対して 1.0 を返し、それ以外の場所では 0.0 を返すインデックス付きプロパティを持つ具象クラスがあるとします。DiagonalMatrix
単一のを使用する を持つこともできますSize
-アイテムを対角線上に保持するための配列。対応するすべての要素をチェックすることにより、任意の 2 つの行列が等しいかどうかを比較できますが、たとえば aDiagonalMatrix
と an の照合IdentitymMatrix
は、2 つの行列が同じサイズであること、および配列内のすべての項目が 1.0 であることを確認することにより、より適切に処理できます (気にする必要はありません)。主対角線の外側にスポットがないことを確認してください)。
Equals
異なる型のオブジェクトが自分自身を同等であると報告するようにセマンティクスを適切に定義できる型であっても、それは最良のアイデアではない可能性があります。カスタムを使用できる場合はEqualityComparer
、奇妙なオーバーライドよりもおそらく優れているでしょうEquals
。