【发布时间】: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 }。现在要构建层次结构,我看到的唯一可能性是通过循环每个接口并找出哪个接口实现哪个接口来自己构建一个层次结构。这是唯一的解决方案还是有更好的解决方案?
-
我不得不问这个问题,除非您正在构建反射器克隆,否则您为什么要关心?我并不是要流鼻涕——我只是好奇,因为担心这个感觉就像是代码的味道。