ReferenceEquals - true和Equals - false预期行为?

jas*_*per 3 c#

如果object.ReferenceEquals返回true,应该instance.Equals总是返回true吗?

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

Assert.True(object.ReferenceEquals(obj,obj));
Assert.True(obj.Equals(obj));
Run Code Online (Sandbox Code Playgroud)

就个人而言,我认为它很奇怪,并且无法想到一个很好的理由,一个实例不应该与自己相等.

Mic*_*tta 7

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

  • 这是出乎意料的行为,是的.正确设计的类应始终返回true,.Equals如果它返回true .ReferenceEquals.这是在MSDN的开发类库设计指南,实现Equals方法文章中编写的:

    遵循Object.Equals方法中定义的协定,如下所示:
         x.Equals(x)返回true.

  • 但是该要求不是由语言或运行时强制执行的.有问题的类的设计者可以完全自由地定义Equals{ return false; }.不正当,但可能.