运算符的默认实现==按引用比较对象。因此,当您覆盖 Equals (默认行为相同)时,您还必须指定==and!=运算符,以便它们调用 Equals (并使其在每个层次结构类中,因为==and!=运算符不是虚拟的)。
我的问题是为什么会这样?为什么要通过引用而不是使用 Equals 来比较对象==?!=我想这样一个基本的事情应该是有原因的。
更新。
评论:我假设==应该依赖于 Equals(但反之亦然),因为您可以在基类中覆盖 Equals 并在派生类中自动使用此实现。==如果 Equals在其实现中使用它就行不通,因为==它不是虚拟的。