【发布时间】:2020-02-19 17:44:49
【问题描述】:
我正在尝试创建一个具有 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)'
这是来自视觉工作室的截图:
【问题讨论】:
-
你为什么要做
new? -
因为是Visual Studio建议的
-
@madreflection:我也对你的评论感到困惑;接口方法的默认实现是 Java 中 mixins 的常用技术,它是 Java 中为数不多的 C# 中缺少的特性之一。我对默认接口样式混合在已经存在扩展方法的语言中的价值持怀疑态度,但我不确定您的评论是什么意思。你能澄清一下吗?
-
@EricLippert:我希望喜欢让你接受它。潜在的博文?
-
@madreflection:好主意!我的博客落后了,但我会将其添加到可能的主题队列中。我喜欢我必须在此过程中学习一些东西的主题。 :)