有关IList<T>
未从IList
继承的原因的问题之前已被提出并被回答。
我认为正确的答案是,如果IList<T>
继承自IList
,那么可以转换为IList并添加不正确类型的项目。
现在我的问题出现了。
为什么List<T>
同时实施IList<T>
和IList
?如果您将List<T>
转换为IList
并添加非T类型的项目,则会正确获得异常。
那么List<T>
实施IList
的目的是什么?
答案 0 :(得分:2)
然后可以转换为IList并添加不正确类型的项目。
这只是一个部分理由:很有可能以某种方式实现IList
,因此不能添加不正确类型的项目 - 正如List<T>
的实现所证明的那样。
但是,,List<T>
已作为基类库的一部分存在。为方便起见,它实现了IList
并抛出了异常。如果我们想要使用它的IList
实现,我们可以在这些约束中这样做,如果我们不想使用它,我们就没有进一步的工作。
与此相反,IList<T>
是一个界面。如果它继承自IList
,则IList<T>
的每个实现者都必须实现IList
的所有弱类型方法,添加了许多通常不需要的工作。
此外,请注意List<T>
实施IList
expilcitly 。这意味着List<T>
的公共接口不会增长;如果明确转换为IList
,则只能获得IList
方法。在接口中,这是不可能的,因为接口不能强制执行另一个接口的显式实现。