【问题标题】:Explicitly inherit 'grand parent' interface in inheritance list在继承列表中显式继承“祖父”接口
【发布时间】:2011-06-21 09:06:47
【问题描述】:

我查看了IOrderedQueryable<T> 接口,发现它继承自IQueryable<T>,但也继承自System.Collections.Generic.IEnumerable<T>IQueryableIEnumerable

public interface IOrderedQueryable<T> : 
    System.Linq.IQueryable<T>,
    System.Collections.Generic.IEnumerable<T>,
    System.Linq.IOrderedQueryable,
    System.Linq.IQueryable,
    System.Collections.IEnumerable 

我的问题:既然IQueryable&lt;T&gt; 已经从这些其他接口继承,为什么IOrderedQueryable 必须明确指定/继承这些接口?为什么不直接继承 System.Linq.IQueryable&lt;T&gt;System.Linq.IOrderedQueryable

显然这个问题一般也适用于接口继承。

【问题讨论】:

  • 旁注:无法获得 C# 语法来指定泛型在键入时正确显示。尖括号和 T 被吃掉了。因此使用了 VB 语法。知道如何获得 C# 语法工作吗?
  • @alwayslearning:使用 <和>尖括号
  • 当您“格式化为代码”(内联反引号或缩进整个段落)时,尖括号仍然存在。请参阅我的编辑。请注意,编辑器的“格式为代码”按钮将执行正确的操作,具体取决于您当前选择的内容
  • @alwayslearning @henrik 您也可以将它们包装在刻度线中:`。自动跳过格式化。

标签: c# linq inheritance interface


【解决方案1】:

类会自动继承这些“祖父”接口,因此您不必明确指定它们。所以,给定这些接口:

interface IBase {}
interface IChild: IBase {}

以下两种都可以:

interface IGrandChild: IChild {}
interface IGrandChild: IBase, IChild {}

文档只列出了祖先接口for convenience and clarity:“文档在一个地方完成比让你搜索十个不同的页面来找出完整的接口集是什么要清楚得多。”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 2019-08-06
    • 2021-04-10
    • 2010-12-23
    相关资源
    最近更新 更多