澄清为什么IList不继承IList
本文关键字:IList 继承 为什么 | 更新日期: 2023-09-27 18:02:57
关于IList<T>
为什么不继承IList
的问题之前已经问过并回答过了。
我认为正确的答案是,如果IList<T>
确实继承了IList
,那么可以强制转换为IList并添加不正确类型的项。
为什么List<T>
同时实现IList<T>
和IList
呢?如果将List<T>
强制转换为IList
并添加非T类型的项,则会正确地得到异常。
那么List<T>
实现IList
的目的是什么呢
则可以强制转换为IList,并添加不正确类型的项。
这只是部分理由:很有可能以某种方式实现IList
,这样就不会添加不正确类型的项- List<T>
的实现证明了这一点。
然而,, List<T>
已经作为基类库的一部分存在。为了方便起见,它实现了IList
并抛出异常。如果我们想使用它的IList
实现,我们可以在这些约束条件下这样做,如果我们不想使用它,我们没有进一步的工作。
与此相反,IList<T>
是一个接口。如果它继承自IList
,那么IList<T>
的每个实现者都必须实现IList
的所有弱类型方法,从而增加了许多通常不需要的工作。
List<T>
显式地实现了IList
。这意味着List<T>
的公共接口不会增长;如果显式转换为IList
,则只能获得IList
方法。在接口中,这是不可能的,因为接口不能强制另一个接口的显式实现。