如果object.ReferenceEquals
返回true,那么instance.Equals
是否应该返回true?
您认为下面的输出是通过/失败的意外行为吗?
Assert.True(object.ReferenceEquals(obj,obj));
Assert.True(obj.Equals(obj));
就我个人而言,我认为它很奇怪,并且无法真正想到良好的原因,其中一个实例不应该等于它自己。
答案 0 :(得分:7)
有两种方法可以回答你的问题。
这是出乎意料的行为,是的。正确设计的类应始终从.Equals
返回true,如果它从.ReferenceEquals
返回true。这已经编入MSDN的开发类库的设计指南, Implementing the Equals Method 文章:
遵循Object.Equals方法中定义的合同,如下所示:
x.Equals(x)
返回true。
但语言或运行时并未强制执行该要求。相关类的设计者可以完全自由地将Equals
定义为{ return false; }
。反常,但可能。
答案 1 :(得分:2)
是的,如果引用等于为真,则equals的正确实现应该返回true。