如果object.ReferenceEquals
返回 true,是否应该instance.Equals
始终返回 true?
您会认为下面的输出是通过/失败的意外行为吗?
Assert.True(object.ReferenceEquals(obj,obj));
Assert.True(obj.Equals(obj));
我个人认为它很奇怪,并且不能真正想到一个很好的理由,一个实例不应该等于它自己。
如果object.ReferenceEquals
返回 true,是否应该instance.Equals
始终返回 true?
您会认为下面的输出是通过/失败的意外行为吗?
Assert.True(object.ReferenceEquals(obj,obj));
Assert.True(obj.Equals(obj));
我个人认为它很奇怪,并且不能真正想到一个很好的理由,一个实例不应该等于它自己。
有两种方法可以回答您的问题。
这是出乎意料的行为,是的。一个设计合理的类.Equals
如果从.ReferenceEquals
. 这在 MSDN开发类库的设计指南,实现 Equals 方法一文中进行了编纂:
遵循 Object.Equals 方法上定义的约定,如下所示:
x.Equals(x)
返回 true。
但是该要求不是由语言或运行时强制执行的。有问题的类的设计者可以完全自由地定义Equals
为{ return false; }
. 反常,但可能。
是的,如果引用 equals 为 true,则 equals 的正确实现应该返回 true。