【发布时间】:2020-01-23 16:27:06
【问题描述】:
在大多数地方,我读到最好从类中的IComparable 和IComparable<T> 继承以提供与非泛型集合的兼容性。我的问题是为什么IComparable<T> 默认不从IComparable 继承呢?向后兼容性将通过这种方式实现。
例如,IEnumerable<T> 确实继承自 IEnumerable,那么为什么不对 IComparable 做同样的事情呢?我阅读了有关差异的信息,但我仍然不明白为什么它是这样设计的。我尝试使用具有相同架构的接口创建一个小示例,并且它按预期工作。
编辑:
此外,Microsoft 文档指出以下内容:
如果泛型接口是逆变的,则泛型接口可以从非泛型接口继承,这意味着它只使用其类型参数作为返回值。在 .NET Framework 类库中,IEnumerable<T> 继承自IEnumerable,因为IEnumerable<T> 仅在GetEnumerator 的返回值和Current 属性getter 中使用了T。
但尽管如此,一个人可以从IComparable<T> 继承IComparable 就好了(如果你创建具有相同架构的接口,那就是)。
【问题讨论】:
-
可能是gives an idea。 (而且它不适用于 IEnumerable。)
-
当我试图查找我的问题时,我看到了这个问题。尽管它只是描述了具有两个接口的类的可能实现。我的问题是为什么
IComparable<T>首先不继承自IComparable。 -
这个问题只能由语言的设计者来回答。其他答案将是猜测和假设。例如参见元问题Is asking “why” on language specifications still considered as “primarily opinion-based” if it can have official answers?
标签: c# interface comparable contravariance icomparable