[#] О сравнении объектов по значению — 2, или Особенности реализации метода Equals
habrabot(difrex,1) — All
2016-11-07 02:00:03


#### В [предыдущей публикации][1] мы рассмотрели общие принципы реализации минимально необходимых доработок класса для возможности сравнения объектов класса по значению с помощью стандартной инфраструктуры платформы .NET.


Эти доработки включают перекрытие методов [Object.Equals(Object)][2] и [Object.GetHashCode()][3].


#### Остановимся подробнее на особенностях реализации метода [Object.Equals(Object)][4] для соответствия следующему требованию в документации:


x.Equals(y) returns the same value as y.Equals(x).


// и, как следствие, следующему:
If (x.Equals(y) && y.Equals(z)) returns true, then x.Equals(z) returns true.
Класс Person, созданный в [предыдущей публикации][5], содержит следующую реализацию метода [Equals(Object)][6]:
**Person.Equals(Object)**
public override bool Equals(object obj)
{
if ((object)this == obj)
return true;

var other = obj as Person;

if ((object)other == null)
return false;

return EqualsHelper(this, other);
}

После проверки ссылочного равенства текущего и входящего объекта, в случае отрицательного результата проверки, происходит приведение входящего объекта к типу Person для возможности сравнения объектов по значению.

В соответствии с примером, приведенным в [документации][7], приведение производится с помощью оператора [as][8]. Проверим, дает ли это корректный результат.
[Читать дальше →][9]

[1]: https://habrahabr.ru/post/314328/
[2]: https://msdn.microsoft.com/library/bsc2ak47.aspx
[3]: https://msdn.microsoft.com/library/system.object.gethashcode.aspx
[4]: https://msdn.microsoft.com/library/bsc2ak47.aspx
[5]: https://habrahabr.ru/post/314328/
[6]: https://msdn.microsoft.com/library/bsc2ak47.aspx
[7]: https://msdn.microsoft.com/library/bsc2ak47.aspx
[8]: https://msdn.microsoft.com/library/cscsdfbt.aspx
[9]: https://habrahabr.ru/post/314500/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut