3

true を返す場合、常にobject.ReferenceEqualstrue を返す必要がありますか?instance.Equals

以下の出力が合格/不合格だった場合、予期しない動作だと思いますか?

Assert.True(object.ReferenceEquals(obj,obj));
Assert.True(obj.Equals(obj));

個人的にはそれは奇妙だと思いますし、インスタンスがそれ自体と等しくないという正当な理由を本当に考えることはできません。

4

2 に答える 2

7

あなたの質問に答えるには2つの方法があります。

  • 予期しない動作です、はい。適切に設計されたクラスは、 から true を.Equals返す場合、常に true を返す必要があります.ReferenceEquals。これは、MSDN のDesign Guidelines for Developing Class LibrariesImplementing the Equals Method の記事で成文化されています。

    次のように、Object.Equals メソッドで定義されたコントラクトに従い
         x.Equals(x)ます。 true を返します。

  • ただし、その要件は言語またはランタイムによって強制されません。問題のクラスの設計者は、完全に自由にEqualsとして定義できます{ return false; }。ひねくれていますが、可能です。

于 2012-08-09T16:58:03.260 に答える
2

はい、参照 equals が true の場合、equals の適切な実装は true を返す必要があります。

于 2012-08-09T16:55:07.517 に答える