Итак, у меня есть интерфейс для объектов, которые требуют, чтобы они отображали свой идентификатор .IEquatable <'1> на интерфейсе
public interface IEntity<TIdentity> {
public TIdentity Id { get; }
}
Теперь мне нужно, чтобы иметь возможность сравнить два объекта, которые друг с другом, но я не могу полагаться на реализации по умолчанию Equals
и GetHashCode
, потому что организации должны быть сравнимы по их идентичности, а не общая подпись , Поскольку каждый класс, который реализует IEntity<'1>
, должен быть сопоставим, я думал об объявлении IEquatable<'1>
непосредственно на интерфейсе сущности.
ну .. это не работает. Когда я объявляю IEquatable<'1>
на IEntity<'1>
интерфейс навязывает реализации классов для реализации следующих действий:
public bool Equals(IEntity<'1> other)
вместо
public bool Equals(TypeImplementingIEntity other)
Так после вызова Equals
на двух лиц, среда выполнения ссылается на Equals(object obj)
, так как тип аргумент по методу, предоставленному IEquatable<'1>
, не соответствует реальному типу! Что?
Согласно [это] (http://stackoverflow.com/questions/371328/why-is-it-important-to- override-gethashcode-when-equals-method-is-overridden), важно также переопределить 'GetHashCode()'. –
Да, вы должны, но это не тот вопрос, о котором я говорил, поэтому я не упоминал об этом. –