Оператор перегрузки == для проверки правильности двух объектов - PullRequest
1 голос
/ 01 марта 2011

Вчера я спрашивал об использовании операторов перегрузки, и никто не упомянул, что это довольно часто и часто используется для проверки равенства двух объектов, таких как строки, цвета ..

Также в этом случае корректно перегрузить ==, если мои типы представляют некоторые объекты, которые можно проверить на справедливость их полей и т. Д. Конечно, я не имею в виду проверку, указывают ли переменные на один и тот же объект.

Ответы [ 4 ]

2 голосов
/ 01 марта 2011

Да, разумно перегрузить оператор == (и, конечно, != одновременно).

Вы должны знать, что является перегрузкой, а нечем переопределение, так что если у вас когда-нибудь есть:

object first = ...;
object second = ...;

if (first == second)

, который проверит на ссылку равенство независимо от того, что вы сделали.

1 голос
/ 01 марта 2011

По моему мнению, лучше использовать ==, чтобы проверить равенство ссылок, и использовать .Equals (Object obj) для пользовательского равенства.

Таким образом, у вас будет два способа сравнения вместо одного.

В любом случае имейте в виду, что если вы переопределяете Equality, вы должны также переопределить GetHashCode (), чтобы два равных объекта возвращали один и тот же хеш-код.

1 голос
/ 01 марта 2011

Вы можете сами решить, что означает справедливость.Если вам известно, что некоторые поля одинаковы, то обязательно проверьте это.

0 голосов
/ 01 марта 2011

Не совсем уверен, каков ваш вопрос, потому что вы, кажется, ответили на него сами. Вы можете перегрузить оператор == и т. Д., Чтобы проверить, что два объекта совпадают, поэтому в ваших примерах строк или цветов, что две строки имеют одинаковое фактическое содержимое, или что два цвета имеют одинаковые значения RGB. Как вы говорите, это отличается от двух переменных, указывающих на один и тот же объект. Возможно, вы захотите проверить раздел MSDN

Учебник по перегрузке оператора

для получения дополнительной информации о перегрузке.

Аналогичный вопрос с дополнительной информацией, включая список операторов, которые вы можете перегрузить: почему C # не допускает перегрузку операторов?

...