==
运算符的默认实现通过引用比较对象。因此,当你重写 Equals(其默认行为相同)时,你也必须指定 ==
和 !=
运算符,使它们调用 Equals(并把它放在层次结构中的每个类中,因为 ==
和 !=
运算符不是虚拟的)。
我的问题是为什么会这样?为什么 ==
和 !=
比较对象时使用引用而不是使用 Equals?我想这应该有一个根本原因。
更新:
关于评论:我假设 ==
应该依赖于 Equals(但反之则不然),因为你可以在基类中重写 Equals 并在派生类中自动使用该实现。如果 Equals 在其实现中使用了 ==
,那就行不通了,因为 ==
不是虚拟的。
==
的两侧都为null时,它应该做什么? - thecoop