3

如果object.ReferenceEquals返回 true,是否应该instance.Equals始终返回 true?

您会认为下面的输出是通过/失败的意外行为吗?

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

我个人认为它很奇怪,并且不能真正想到一个很好的理由,一个实例不应该等于它自己。

4

2 回答 2

7

有两种方法可以回答您的问题。

  • 这是出乎意料的行为,是的。一个设计合理的类.Equals如果从.ReferenceEquals. 这在 MSDN开发类库的设计指南实现 Equals 方法一文中进行了编纂:

    遵循 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 回答