8

重複の可能性:
Equals メソッドをオーバーライドするときに、== および != 演算子をオーバーライドする必要がありますか? (。ネット)

C# コンパイラは、== をオーバーライドする場合は equals をオーバーライドするように求めます。理由を知りたいだけですか?

4

3 に答える 3

12

==を介して等価性を再定義している場合、が と非常に異なることを行うと非常に混乱し、コンパイル時に型がわからない場合は のみが使用可能になるため、フォールバックする必要あります。結果として、定義とは、 、、および を定義し、場合によっては を実装することを意味します。==.Equals.Equals.Equals====!=EqualsGetHashCodeIEquatable<T>T

于 2012-11-16T10:25:54.593 に答える
4

そうしないと、意味的に類似した 2 つの操作が異なる結果をもたらす可能性があり、多くの混乱を招くからです。

コンパイラが停止するのか、それとも単なる警告なのかはわかりませんが、どちらの場合でも、通常は同じように動作することを確認することをお勧めします。

double.NaN == double.NaNvsでこんなものがありますdouble.NaN.Equals(double.NaN)

于 2012-11-16T10:25:34.333 に答える
1

そうしないと、比較の方法に応じて異なる結果が得られるためです。

実行するとx == y、実行とは異なる結果が得られる可能性がありますy == xxおよびyが異なるタイプの場合)。リストで値を検索したり、辞書でキーとして使用したりするなど、他の比較では==演算子が使用されないため、まったく機能しません。

于 2012-11-16T10:40:06.583 に答える