Подтвердить что ты не робот

IStructuralEquatable vs Equals?

согласно msdn

IStructuralEquatable

Определяет методы поддержки сравнения объектов для структурных равенство. Структурное равенство означает, что два объекта равны, потому что они имеют равные значения. Он отличается от эталонного равенства, который указывает, что две ссылки на объекты равны, поскольку они ссылаются тот же физический объект.

разве это не нужно делать Equals? (при переопределении IEquatable)?

4b9b3361

Ответ 1

Причина, по которой вам нужен IStructuralEquatable, заключается в определении нового способа сравнения, который был бы прав для объектов all.

Интерфейс IStructuralEquatable позволяет реализовать индивидуальные сравнения для проверки структурного равенства сбора объекты. То есть вы можете создать свое собственное определение структурных равенства и указать, что это определение будет использоваться с коллекцией тип, который принимает интерфейс IStructuralEquatable.

Например, если вам нужен список, который будет сортировать все его элементы по определенному определению. В этом случае вы не хотите изменять реализацию класса, поэтому не хотите использовать метод Equals.

это определит общий способ сравнения объектов в вашем приложении.

Ответ 2

Контракт Равенств отличается от контракта IStructuralEquatable тем, что он указывает, равно ли 2 объекта логически.

По умолчанию Equals в ссылочном типе указывает, ссылается ли ссылка на один объект на один экземпляр объекта. Однако вы можете переопределить Equals в соответствии с логикой вашего приложения.

В качестве примера может быть смысл, если два разных экземпляра класса Employee считаются равными, если оба они представляют один и тот же объект в вашей системе. Чтобы достичь этого, объекты-сотрудники с соответствующими свойствами SSN будут считаться логически равными, даже если они не были бы структурно равными.