Tag: 库设计

为什么通用IList 不inheritance非通用IList

IList不inheritanceIList ,其中IEnumerableinheritanceIEnumerable 。 如果out修饰符是唯一的原因,那么为什么大多数IList的实现(例如Collection , List )都实现了IList接口。 所以任何人都可以说好,如果对于IList所有实现都是如此,那么在必要时将其直接转换为IList 。 但问题是虽然IList不inheritanceIList因此无法保证每个IList对象都是IList 。 而且使用IList显然不是解决方案,因为没有out修饰符generics不能分配给较少的inheritance类; 并且创建List的新实例不是解决方案,因为有人可能想要IList实际引用作为IList指针; 并使用List insured IList实际上是一个糟糕的编程实践,并不适用于所有目的。 如果.NET希望提供灵活性, IList每个实现都不应该有非generics实现的契约(即IList )那么为什么他们没有保留另一个实现generics和非generics版本的接口并且没有t建议所有希望签订通用和非遗传项目的具体类别应通过该接口签订合同。 将ICollection为ICollection并将IDictionary为IDictionary时也会出现同样的问题。