Здравствуйте, HowardLovekraft, Вы писали:
KA>>Оказывается, метод попроще ...
KA>> реализуется через интерфейс IEquatable<T>.
KA>>Ранее приведенный кусок кода надо дополнить всего парой строк (выделены жирным шрифтом), а именно:
KA>>KA>> class Super : IBase, System.IEquatable<Super>
KA>> {
KA>> public void Everything() { }
KA>> public bool Equals(Super other) { return true; }
KA>> }
KA>>}
HL>До конца не дочитали?
HL>HL>Примечания для разработчиков
HL>Если реализуется интерфейс IEquatable<T>, следует также переопределить реализацию базового класса для методов Object.Equals(Object) и GetHashCode, чтобы их поведение соответствовало поведению метода IEquatable<T>.Equals.
HL>Нифига это не проще. См. здесьАвтор: Sinix
Дата: 03.01.11
:
HL>HL>Для простых случаев проще использовать свой IEqualityComparer<IBase>
Эээ... спасибо за подсказку.
Хоть это и не следует из приведенного мною фрагмента кода, в моём случае идёт сравнение только однотипных объектов, т.е. я не собираюсь сравнивать Super с каким-то гипотетическим классом Super2, а только Super — c Super'ом, и Super2 — c Super2.
Если же пользователь захочет сравнивать через Equals(Object), то эту вредную наклонность проще пресечь сокрытием данного метода, или выбрасыванием исключения, ибо нефиг (это не имеет смысла в предметной области, которая моделируется программой).
EqualityComparer — интересный класс. Возможно, его применение и оправдано в более сложных случаях. Пока что я не вижу необходимости выносить сравнение из Super.Equals(Super) в EqualityComparer.Equals(Super,Super).