Зачем писать логику равенства в методе Equals(Tother) интерфейса IEquatable?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Зачем писать логику равенства в методе Equals(Tother) интерфейса IEquatable?

Сообщение Anonymous »

Контекст
Тип значения (структура):

При реализации IEquatable для пользовательского значения type (struct), мы склонны писать реальную логику равенства в реализации метода Equals(Tother) и добиваться согласованности:
  • переопределить метод Equals(Object? obj) и
  • перегружает операторы == и !=
для внутреннего вызова Equals(Tother) для проверки равенства.
Ссылочный тип (класс):

И аналогично для ссылочного типа (класса), мы склонны писать логику равенства в перегрузке оператора == и добиваться согласованности:
  • переопределить метод Equals(Object? obj),
  • реализовать IEquatable.Equals(T Other) и
  • перегрузить оператор !=
для внутреннего вызова == для проверки равенства.
Одна из причин, по которой я могу подумать о ссылочном типе написать логику равенства в перегрузке оператора ==, если один из объектов имеет значение null, например:

Код: Выделить всё

ClassA a = null;
ClassB b = new ClassB();
a.Equals(b);             //throws System.NullReferenceException during runtime
Этот сценарий лучше всего решается с помощью перегрузки оператора ==. Я не знаю других причин, если знаете, укажите их.
Вопрос
Для пользовательских типов значений, какова причина написания фактической логики равенства в реализации метода Equals(Tother), а не в перегрузке оператора ==?

Подробнее здесь: https://stackoverflow.com/questions/792 ... -interface
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»