当IEnumerable <t>已经继承IEnumerable时,为什么IQueryable <t>需要继承IEnumerable <t>和IEnumerable?

时间:2018-02-10 08:32:10

标签: c# inheritance language-design

虽然这个问题特定于IQueryable设计,但我遇到了许多类和接口设计,其中类或接口定义明确定义了IChildInterfaceIParentInterface尽管IChildInterface : IParentInterface喜欢:

class MyClass : IChildInterface, IParentInterface

问题1 :在什么情况下需要这样做?

问题2 :如果为IChildInterfaceIParentInterface定义了具有相同名称的扩展方法,那么哪个编译器将解析为?

1 个答案:

答案 0 :(得分:0)

Eric Lippert在他的博客中写了你的第一个问题(标题是“这么多界面!”):https://blogs.msdn.microsoft.com/ericlippert/2011/04/04/so-many-interfaces/

他基本上说不需要添加接口及其基类型,但提到:

  

也许是因为他们认为这样做会使代码更容易   理解和更多自我记录。

对于扩展方法,选择最近的封闭命名空间中的方法,或者作为C#语言规范说明“扩展方法调用”:

  

从最近的封闭命名空间声明开始,继续   每个封闭的命名空间声明,并以。结尾   包含编译单元