Тут как-то пару месяцев обсуждали этот метод у Object из .Net в рамках наследования. Нашёл интересную
статью по этому поводу (правда там Ява, но ничего это не меняет). Там высказывается вполне корректная на мой взгляд точка зрения: equals не должен быть методом объекта, иначе он будет не симметричным, что ведёт к логическим ошибкам.