【问题标题】:How do I find the Interface Inheritance Hierarchy For a type?如何找到类型的接口继承层次结构?
【发布时间】:2011-03-25 21:28:57
【问题描述】:

我的目的是找出一个类是否直接实现了一个接口。在下面的示例中,B 类实现了接口 IB,而接口 IB 实现了 IA。

如何找出继承层次结构?当我们在对象浏览器中查看一个类型时,它显示了一个详细的层次结构。我怎样才能达到类似的结果?

interface IA
{
    string Member1 { get;set; }
}

interface IB : IA
{
    string Member2 { get; set; }
}

class B : IB
{
    public string Member1 { get; set; }
    public string Member2 { get; set; }
}

反射器屏幕截图

alt text http://img571.imageshack.us/img571/7485/49211426.png

在从反射器截取的屏幕截图中,它也显示了接口的层次结构。

如何找出类型的接口层次结构。

【问题讨论】:

  • BaseType of B (typeof(B).BaseType) 将返回 Object
  • 在这种情况下,您知道它没有被任何其他类型继承,您可以检查接口本身...就像Type.GetInterfaces Method 一样(您可以递归调用它来获取所有接口 - 不是非常有效,但有效)。
  • GetInterfaces 将返回所有接口。对于 B,它将返回 { IA, IB }。现在要构建层次结构,我看到的唯一可能性是通过循环每个接口并找出哪个接口实现哪个接口来自己构建一个层次结构。这是唯一的解决方案还是有更好的解决方案?
  • 我不得不问这个问题,除非您正在构建反射器克隆,否则您为什么要关心?我并不是要流鼻涕——我只是好奇,因为担心这个感觉就像是代码的味道。

标签: c# interface hierarchy


【解决方案1】:

Reflection 和 .NET 核心旨在使接口快速使用。因此,Type.GetInterfaces 返回该类型可以响应的所有接口,“扁平化”过程中的接口层次结构。

如果您想知道这些接口的祖先,您还需要在每个接口上调用 GetInterfaces。没有捷径可走,因为接口的层次结构对 CLR 运行时没有什么价值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 2014-12-22
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    相关资源
    最近更新 更多