澄清为什么IList <t>不从IList继承

时间:2015-07-16 14:12:33

标签: c# inheritance

有关IList<T>未从IList继承的原因的问题之前已被提出并被回答。

我认为正确的答案是,如果IList<T>继承自IList,那么可以转换为IList并添加不正确类型的项目。

现在我的问题出现了。

为什么List<T>同时实施IList<T>IList?如果您将List<T>转换为IList并添加非T类型的项目,则会正确获得异常。

那么List<T>实施IList的目的是什么?

1 个答案:

答案 0 :(得分:2)

  

然后可以转换为IList并添加不正确类型的项目。

这只是一个部分理由:很有可能以某种方式实现IList,因此不能添加不正确类型的项目 - 正如List<T>的实现所证明的那样。

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

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

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