true を返す場合、常にobject.ReferenceEquals
true を返す必要がありますか?instance.Equals
以下の出力が合格/不合格だった場合、予期しない動作だと思いますか?
Assert.True(object.ReferenceEquals(obj,obj));
Assert.True(obj.Equals(obj));
個人的にはそれは奇妙だと思いますし、インスタンスがそれ自体と等しくないという正当な理由を本当に考えることはできません。
true を返す場合、常にobject.ReferenceEquals
true を返す必要がありますか?instance.Equals
以下の出力が合格/不合格だった場合、予期しない動作だと思いますか?
Assert.True(object.ReferenceEquals(obj,obj));
Assert.True(obj.Equals(obj));
個人的にはそれは奇妙だと思いますし、インスタンスがそれ自体と等しくないという正当な理由を本当に考えることはできません。
あなたの質問に答えるには2つの方法があります。
予期しない動作です、はい。適切に設計されたクラスは、 から true を.Equals
返す場合、常に true を返す必要があります.ReferenceEquals
。これは、MSDN のDesign Guidelines for Developing Class Libraries、Implementing the Equals Method の記事で成文化されています。
次のように、Object.Equals メソッドで定義されたコントラクトに従い
x.Equals(x)
ます。 true を返します。
ただし、その要件は言語またはランタイムによって強制されません。問題のクラスの設計者は、完全に自由にEquals
として定義できます{ return false; }
。ひねくれていますが、可能です。
はい、参照 equals が true の場合、equals の適切な実装は true を返す必要があります。