Возможный дубликат:
Почему оператор ReferenceEquals и == отличается от Equals
Стандартная реализация оператора ==
сравнивает объекты по ссылкам. Поэтому, когда вы переопределяете Equals (поведение по умолчанию такое же), вы также должны указывать операторы ==
и !=
, чтобы они вызывали Equals (и делали их в каждом классе иерархии как ==
и !=
) операторы не виртуальный).
Мой вопрос, почему это так? Почему ==
и !=
сравнивают объекты по ссылке вместо использования Equals? Наверное, должна быть причина для такой фундаментальной вещи.
Обновить.
К комментариям: Я предположил, что ==
должен зависеть от Equals (но не наоборот), поскольку вы можете переопределить Equals в базовом классе и автоматически использовать эту реализацию в производных классах. Он не будет работать, если Equals использовал ==
в своей реализации, поскольку ==
не является виртуальным.