Я наткнулся на это недавно, до сих пор я с радостью переопределял оператор равенства (==) и/или Equals, чтобы увидеть, есть ли две ссылки типы фактически содержали те же данные (т.е. два разных экземпляра, которые выглядят одинаково).
Я использую это еще больше, так как я получил больше возможностей для автоматического тестирования (сравнение ссылочных/ожидаемых данных с возвратом).
При просмотре некоторых правил стандартов кодирования в MSDN я столкнулся с статья, которая советует против этого. Теперь я понимаю, почему статья говорит об этом (потому что это не тот же экземпляр), но он не отвечает на вопрос:
- Каков наилучший способ сравнения двух ссылочных типов?
- Должны ли мы реализовать IComparable? (Я также заметил, что это должно быть зарезервировано только для типов значений).
- Есть ли какой-то интерфейс, о котором я не знаю?
- Должны ли мы просто рулить наши?!
Большое спасибо ^ _ ^
Update
Похоже, я неправильно прочитал часть документации (это был длинный день), и переопределение Equals может быть способом..
Если вы используете ссылку типов, вы должны учитывать переопределение метод Equals на ссылочном типе если ваш тип выглядит как базовый тип такие как Point, String, BigNumber, и так далее. Большинство ссылочных типов должны не перегружать оператор равенства, даже , если они переопределяют Equals. Однако, если вы используете ссылку тип, который должен иметь ценность семантика, такая как комплексное число типа, вы должны переопределить равенство Оператор.