Тип значения (структура):
При реализации IEquatable для пользовательского значения type (struct), мы склонны писать реальную логику равенства в реализации метода Equals(Tother) и добиваться согласованности:
- переопределить метод Equals(Object? obj) и
- перегружает операторы == и !=
Ссылочный тип (класс):
И аналогично для ссылочного типа (класса), мы склонны писать логику равенства в перегрузке оператора == и добиваться согласованности:
- переопределить метод 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