Сравнение объектов C # - PullRequest
2 голосов
/ 06 марта 2011

Может ли кто-нибудь указать на идею перегрузки operator== для выполнения глубокого сравнения объектов (вместо эталонного сравнения).

Из MSDN:

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

Когда это действительно принесет пользу?

И, например, если у каждого объекта есть метод Equals, что делает сравнение значений возможным, почему кто-то когда-либо выполняет значение (не ссылка) сравнение с использованием оператора x == y?

Я думаю, что-то не понимаюпотому что это выглядит очень странно для меня.

Ответы [ 3 ]

6 голосов
/ 06 марта 2011

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

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

оператор перегрузки == только улучшает читабельность вашего кода.Всегда используйте .Equals () для определенных вами типов, особенно для глубокого сравнения объектов.

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

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

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

...