【发布时间】:2021-02-23 01:57:34
【问题描述】:
我做了一个自定义的通用列表类:
class ComparableList<T> : IList<T> where T : IComparable<T>
对于泛型类型,我可以使用直接实现 IComparable 的类型,例如:
class MyComparableClass : IComparable<MyComparableClass>
或者我可以使用继承自它的类型:
class MyInheritedClass : MyComparableClass
然后我决定IEquatable<T>会更适合。
所以我改变了列表类的约束,让MyComparableClass同时实现IComparable<MyComparableClass>和IEquatable<MyComparableClass>。
由于某种原因,我不能再将MyInheritedClass 用作自定义列表的泛型类型,除非我手动使其实现IEquatable<MyInheritedClass>。我将列表约束切换回IComparable<T>,突然之间我可以再次使用继承的类。
IComparable<T> 和 IEquatable<T> 之间有什么不同导致规则不同?
【问题讨论】:
-
-
如果你实现
IList<T>,你可能也应该实现IReadOnlyList<T>(这是因为IList<T>由于历史原因没有扩展IReadOnlyList<T>- 这将被修复最终 但不要指望至少再过几年)。