operatorのデフォルトの実装は==、参照によってオブジェクトを比較します。したがって、Equals (デフォルトの動作は同じ) をオーバーライドする場合は、==and演算子も指定して、Equals を呼び出すようにする必要があります (また、 and演算子は仮想ではないため!=、階層のすべてのクラスでそれを作成します)。==!=
私の質問は、なぜそうなのかということです。Equals を使用する代わりに参照によってオブジェクト==を比較するのはなぜですか? !=そんな根本的なことには理由があるはずです。
アップデート。
コメントへ:==基本クラスでEqualsをオーバーライドし、派生クラスでこの実装を自動的に使用できるため、Equalsに依存する必要があると想定しました(ただし、その逆はありません)。仮想ではない==ため、実装にEquals を使用すると機能しません。==