【问题标题】:Why IList<T> inherits IEnumerable<T> and IEnumerable again为什么 IList<T> 再次继承 IEnumerable<T> 和 IEnumerable
【发布时间】:2013-02-19 05:09:02
【问题描述】:

偶然在MSDN上看了一下IList&lt;T&gt;ICollection&lt;T&gt;,看到这两个接口的定义是:

public interface ICollection<T> : IEnumerable<T>, IEnumerable
public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable

注意ICollection&lt;T&gt; 继承自IEnumerable&lt;T&gt;IEnumerable,没关系。 IList&lt;T&gt;继承自ICollection&lt;T&gt;,但是为什么IList&lt;T&gt;又要继承IEnumerable&lt;T&gt;IEnumerable呢?

这有什么理由吗?

【问题讨论】:

  • 我相信这是为了兼容性,因为 IEnumerable 带有 2.0 版

标签: c# .net generics ienumerable


【解决方案1】:

文档是以这种方式生成的,因此您可以查看一个类型实现了哪些接口,而无需通过接口继承层次结构遵循传递链接。

【讨论】:

  • 我同意。没有结构上的原因,除了恕我直言。
  • 这只是文档。如果您检查 mscorlib 库,例如使用 dotPeek,那么您可以看到,在 IList 接口中,接口再次像这样列出:
  • 如果你尝试实现ILIst&lt;T&gt;,你确实会得到并需要两个版本的GetEnumerator
  • @V4Vendetta 我相信你误解了这个问题
  • @280Z28 我猜你是对的,也许你可以参考这个答案reflector.webtropy.com/default.aspx/4@0/4@0/untmp/DEVDIV_TFS/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
  • 1970-01-01
  • 2023-04-07
  • 2011-04-05
相关资源
最近更新 更多