澄清为什么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<T>不继承IList

则可以强制转换为IList,并添加不正确类型的项。

这只是部分理由:很有可能以某种方式实现IList,这样就不会添加不正确类型的项- List<T>的实现证明了这一点。

然而,List<T>已经作为基类库的一部分存在。为了方便起见,它实现了IList并抛出异常。如果我们想使用它的IList实现,我们可以在这些约束条件下这样做,如果我们不想使用它,我们没有进一步的工作。

与此相反,IList<T>是一个接口。如果它继承自IList,那么IList<T>的每个实现者都必须实现IList的所有弱类型方法,从而增加了许多通常不需要的工作。

此外,注意List<T>显式地实现了IList 。这意味着List<T>的公共接口不会增长;如果显式转换为IList,则只能获得IList方法。在接口中,这是不可能的,因为接口不能强制另一个接口的显式实现。