#### В [предыдущей публикации][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