C#: возможно ли это? (Обеспечение реализации по умолчанию для IEquatable в подчиненном интерфейсе) - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь создать интерфейс, который имеет свойство Id, а затем реализует IEquatable с использованием этого идентификатора.

Однако класс, реализующий промежуточный интерфейс, выдает ошибку, что он не реализует IEquatable.

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

То, что я хочу сделать, - это позволить классам просто реализовать IntermediateInterface и немедленно быть приравненными друг к другу через свойство Id, требуемое этим интерфейсом.

Вот код в виде текста:

public interface IntermediateInterface<T> : IEquatable<T>
    where T : IntermediateInterface<T>
{
    int Id { get; set; }
    public new bool Equals(T other)
    {
        return Id.Equals(other.Id);
    }
}

public class ActualType : IntermediateInterface<ActualType> {
    public int Id { get; set; }
}

Вот текст ошибки : Error CS0535 'ActualType' does not implement interface member 'IEquatable<ActualType>.Equals(ActualType)'

Вот скриншот из visual studio :

enter image description here

1 Ответ

0 голосов
/ 19 февраля 2020

Так что я разобрался.

Если у меня есть переопределение IntermediateInterface Equals явно (с использованием идентификатора IEquatable), оно работает так, как я ожидал.

Снимок экрана:

enter image description here

Редактировать:

Вот правильный код (как текст!):

public interface IntermediateInterface<T> : IEquatable<T>
    where T : IntermediateInterface<T>
{
    int Id { get; set; }
    bool IEquatable<T>.Equals(T other)
    {
        return Id == other?.Id;
    }
}

public class ActualType : IntermediateInterface<ActualType> {
    public int Id { get; set; }
}
...