C# 为什么存在泛型和非泛型IComparable接口?

C# 为什么存在泛型和非泛型IComparable接口?,c#,icomparable,C#,Icomparable,也许这个问题听起来很傻,但是为什么会有一个和i可比较的接口呢 此外,在引入泛型之前,在版本1.1中添加了非泛型的IComparable,而在版本2.0中与泛型一起添加了icomparaer 出于与所有通用接口相同的原因,首选通用版本-它更安全,并更清楚地记录意图。结构类型在传递给泛型方法时也不需要装箱,因为对于具有对象参数(如IComparable)的方法,结构类型也不需要装箱。与IComparable相比,它还有一个性能优势。非泛型IComparable是在泛型引入之前在1.1版中添加的,而在

也许这个问题听起来很傻,但是为什么会有一个和
i可比较的接口呢


此外,在引入泛型之前,在版本1.1中添加了非泛型的
IComparable
,而在版本2.0中与泛型一起添加了
icomparaer


出于与所有通用接口相同的原因,首选通用版本-它更安全,并更清楚地记录意图。结构类型在传递给泛型方法时也不需要装箱,因为对于具有
对象
参数(如
IComparable)的方法,结构类型也不需要装箱。与
IComparable相比,它还有一个性能优势。

非泛型
IComparable
是在泛型引入之前在1.1版中添加的,而在2.0版中,
IComparer
与泛型一起添加


出于与所有通用接口相同的原因,首选通用版本-它更安全,并更清楚地记录意图。当传递给泛型方法时,结构类型也不需要装箱,因为对于带有
对象
参数(如
IComparable)的方法,结构类型也不需要装箱。与之相比
还有一个性能优势。

谢谢。我想,由于兼容性原因,非泛型版本没有被删除?如果它用于
结构
,它将在不装箱的情况下通过它。@JohnThreepwood Right:没有理由主动破坏使用非泛型接口的开发人员。当然,他们可以在闲暇时自由升级。@ChrisSinclair-我已经更新了答案,以包含拳击优势。@JohnThreepwood删除所有非泛型版本的类意味着所有2.0.NET之前的代码都将停止运行。那不是你想要的。作为旁注:Java也有同样的问题,走了一条不同的道路:他们没有使用非泛型类和泛型类,而是将泛型转换为编译器功能,而不是语言功能:编译后,所有泛型类型信息都消失了,使用的是普通的非泛型类。这就是所谓的类型擦除。顺便说一句,我认为这是爪哇人做出的最糟糕的决定。谢谢。我想,由于兼容性原因,非泛型版本没有被删除?如果它用于
结构
,它将在不装箱的情况下通过它。@JohnThreepwood Right:没有理由主动破坏使用非泛型接口的开发人员。当然,他们可以自由地在空闲时升级。@chriscinclair-我更新了包含装箱优势的答案。@JohnThreepwood删除所有非通用类版本将意味着所有2.0.NET之前的代码都将停止工作。那不是你想要的。作为旁注:Java也有同样的问题,走了一条不同的道路:他们没有使用非泛型类和泛型类,而是将泛型转换为编译器功能,而不是语言功能:编译后,所有泛型类型信息都消失了,使用的是普通的非泛型类。这就是所谓的类型擦除。顺便说一句,我认为这是爪哇人做出的最糟糕的决定。