В
предыдущей публикации мы рассмотрели общие принципы реализации минимально необходимых доработок класса для возможности сравнения объектов класса по значению с помощью стандартной инфраструктуры платформы .NET.
Эти доработки включают перекрытие методов
Object.Equals(Object) и
Object.GetHashCode().
Остановимся подробнее на особенностях реализации метода
Object.Equals(Object) для соответствия следующему требованию в документации:
x.Equals(y) returns the same value as y.Equals(x).
Класс Person, созданный в
предыдущей публикации, содержит следующую реализацию метода
Equals(Object):
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 для возможности сравнения объектов по значению.
В соответствии с примером, приведенным в
документации, приведение производится с помощью оператора
as. Проверим, дает ли это корректный результат.