如果object.ReferenceEquals返回true,应该instance.Equals总是返回true吗?
您认为下面的输出是通过/失败的意外行为吗?
Assert.True(object.ReferenceEquals(obj,obj));
Assert.True(obj.Equals(obj));
Run Code Online (Sandbox Code Playgroud)
就个人而言,我认为它很奇怪,并且无法想到一个很好的理由,一个实例不应该与自己相等.
有两种方法可以回答您的问题.
这是出乎意料的行为,是的.正确设计的类应始终返回true,.Equals如果它返回true .ReferenceEquals.这是在MSDN的开发类库设计指南,实现Equals方法文章中编写的:
遵循Object.Equals方法中定义的协定,如下所示:
x.Equals(x)返回true.
但是该要求不是由语言或运行时强制执行的.有问题的类的设计者可以完全自由地定义Equals为{ return false; }.不正当,但可能.