C#:这可能吗? (在子接口中为IEquatable提供默认实现)

时间:2020-02-19 17:44:49

标签: c# .net c#-8.0

我正在尝试制作一个具有Id属性的接口,然后使用该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 :(得分:0)

所以我想通了。

如果我(使用IEquatable标识符)明确地重写了IntermediateInterface,则它按我的预期工作。

屏幕截图:

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; }
}
相关问题