#### В [предыдущей публикации][1] мы получили вариант реализации сравнения объектов по значению для платформы [.NET][2], на примере класса Person, включающий: {#v-predyduschey-publikaciihttpshabrahabrrupost315168-my-poluchili-variant-realizacii-sravneniya-obektov-po-znacheniyu-dlya-platformy-nethttpswwwmicrosoftcomnet-na-primere-klassa-person-vklyuchayuschiy}
* перекрытие методов [Object.GetHashCode()][3], [Object.Equals(Object)][4];
* реализацию интерфейса [IEquatable (Of T)][5];
* реализацию Type-specific статических метода Equals(Person, Person) и операторов ==(Person, Person), !=(Person, Person).
Каждый из способов сравнения для любой одной и той же пары объектов возвращает один и тот же результат:
**Пример кода**
Person p1 = new Person("John", "Smith", new DateTime(1990, 1, 1));
Person p2 = new Person("John", "Smith", new DateTime(1990, 1, 1));
//Person p2 = new Person("Robert", "Smith", new DateTime(1991, 1, 1));
object o1 = p1;
object o2 = p2;
bool isSamePerson;
isSamePerson = o1.Equals(o2);
isSamePerson = p1.Equals(p2);
isSamePerson = object.Equals(o1, o2);
isSamePerson = Person.Equals(p1, p2);
isSamePerson = p1 == p2;
isSamePerson = !(p1 == p2);
При этом, каждый из способов сравнения является коммутативным:
x.Equals(y) возвращает тот же результат, что и y.Equals(x), и т.д.
Таким образом, клиентский код может сравнивать объекты любым способом — результат сравнения будет детерминирован.
#### Однако, требует раскрытия вопрос: {#odnako-trebuet-raskrytiya-vopros}
Как именно обеспечивается детерминированность результата при реализации статических методов и операторов сравнения в случае наследования — с учетом того, что статические методы и операторы не обладают полиморфным поведением.
[Читать дальше →][6]
[1]:
https://habrahabr.ru/post/315168/
[2]:
https://www.microsoft.com/net
[3]:
https://msdn.microsoft.com/library/system.object.gethashcode.aspx
[4]:
https://msdn.microsoft.com/library/bsc2ak47.aspx
[5]:
https://msdn.microsoft.com/library/ms131187.aspx
[6]:
https://habrahabr.ru/post/315258/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut