【问题标题】:Why does C# explicitly implement parent interfaces for its built-in types?为什么 C# 为其内置类型显式实现父接口?
【发布时间】:2020-04-04 11:21:12
【问题描述】:

据我了解,给定一个接口 Interface Parent,然后是一个从 Parent 继承的接口,例如:Interface Child : ParentChild将自动要求实现 Parent 的成员,而无需指定。

然而,我注意到在实现接口时同时指定了 ParentChild 的所有内置类型。 例如:

public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>...

离开上面的内置 List 类型的例子,为什么它专门实现 ICollection 例如当 IList 已经这样做了?既然 ICollection 已经这样做了,为什么还要实施 IEnumerable?等等。

这是一般情况下应该做的事情,还是有特定原因为内置类型做这件事?

【问题讨论】:

  • 在哪里查看此信息?请记住,由于各种原因,文档或反编译代码可能会显示原始源代码中未出现的接口。根据the reference sourceList&lt;T&gt; : IList&lt;T&gt;, System.Collections.IList, IReadOnlyList&lt;T&gt; 是完整的声明。
  • (另外,请记住List&lt;T&gt; 不是 C# 的“内置类型”。它是一个 .NET Framework类型)
  • 是的,为了您的方便,反编译显示了隐含/间接接口以及显式接口。无论如何,再次列出它们是多余的,并且没有任何效果。
  • 一开始就没有明确的实现。 documentation page 显示了所有已实现的接口,这并不意味着源代码看起来那样。 There are some explicit implementations 但这些主要是非通用接口
  • 你说得对,这是反编译器的结果。谢谢!问题可以结束了。

标签: c# .net


【解决方案1】:

documentation page for List 显示了该类型实现的所有接口,这并不意味着源代码看起来那样。在.NET Old source 中,签名只是:

public class List<T> : IList<T>, System.Collections.IList, IReadOnlyList<T>) 

有一些 explicit implementations,但主要是非通用接口 IListICollection,人们真的不应该在没有明确努力的情况下使用它们

【讨论】:

猜你喜欢
  • 2011-05-05
  • 2010-09-29
  • 1970-01-01
  • 2013-11-17
  • 2016-10-26
  • 2015-01-15
  • 1970-01-01
相关资源
最近更新 更多