c# - 为什么 IComparable从 IComparable 继承?
问题描述
在大多数地方,我读到最好从两个类IComparable
和IComparable<T>
类中继承以提供与非泛型集合的兼容性。我的问题是为什么IComparable<T>
不IComparable
默认继承呢?向后兼容性将通过这种方式实现。
例如,IEnumerable<T>
继承自IEnumerable
,那么为什么不做同样的事情IComparable
呢?我阅读了有关差异的信息,但我仍然不明白为什么它是这样设计的。我尝试创建一个具有相同架构的接口的小示例,并且它按预期工作。
编辑:此外,Microsoft 文档指出以下内容:如果泛型接口是逆变的,则泛型接口可以从非泛型接口继承,这意味着它仅使用其类型参数作为返回值。在.NET Framework 类库中,IEnumerable<T>
继承自是IEnumerable
因为IEnumerable<T>
只在返回值GetEnumerator
和Current
属性getter中使用了T。
但尽管如此,一个人可以很好地继承(如果你创建具有相同架构的接口,那就是)IComparable
。IComparable<T>
解决方案
如果未指定类型,请自行尝试,然后实现泛型接口的类也需要实现默认类型方法
public interface IFoo
{
void Foo(object o);
}
public interface IFoo<T> : IFoo
{
void Foo(T o);
}
这变成
public class Foo : IFoo<int>
{
void IFoo<int>.Foo(int o)
{
throw new System.NotImplementedException();
}
void IFoo.Foo(object o)
{
throw new System.NotImplementedException();
}
}
在这种情况下,您使用一种方法实现一个接口,并且您似乎必须实现从类型化接口继承的两种方法
推荐阅读
- python - 计算和比较不同电子表格中不同列的出现次数
- angular - 为什么输入元素没有获得焦点?
- php - 未为 SMTP 电子邮件正确设置联系表单 PHP 文件且未发送
- vue.js - 从其他自定义组件构建自定义组件时如何启用 v-model 绑定
- excel - 如何在 VBA 中监视 SheetChange 在一个范围内,而不仅仅是在带有下拉列表的单元格上
- c# - 如何反序列化包含列表的数组?
- c# - 无法执行查询,因为日期时间不会转换为字符串 c#/MSSQL
- reactjs - 使用 react-apollo 重新获取查询:为什么“加载”不正确?
- java - 如何修复测试后打开应用程序然后截屏的报告
- jquery - Symfony:使用 ajax 更新值