我正在使用一些类和接口,并开发了一种简单的方法来确定类的层次结构,即识别继承链。
public static void OutputClassHierarchy(Type ty)
{
if (ty.BaseType == null)
{
Console.WriteLine("{0}: Base", ty);
Console.WriteLine("");
return;
}
Console.WriteLine("{0} : {1}", ty, ty.BaseType);
OutputClasshierarchy(ty.BaseType);
}
所以,对于
OutputClassHierarchy(typeof(System.Exception));
我得到了输出:
System.Exception:System.Object
System.Object:Base
这是我的期望。
但是,如果我尝试使用实现另一个接口的接口,即
interface IMyInterface : IDisposable
{
void Hello();
}
...
OutputClassHierarchy(typeof(IMyInterface));
我得到了输出:
MyNameSpace.IMyInterface:Base
那么,这里发生了什么?是否有可能推断出上面声明的接口层次结构,或者在接口方面没有这样的东西?
此外,所有这些中System.Object
在哪里?我以为一切都建立在它之上。
答案 0 :(得分:4)
接口不是从Object派生的,因此在输出它的基础时它不会显示。以下是Eric Lippert对从Object派生的东西的评论(以及可转换为Object类型的东西)。
http://blogs.msdn.com/ericlippert/archive/2009/08/06/not-everything-derives-from-object.aspx
这个SO答案可能有助于回答有关包含其他接口的接口的问题:
How to get interface basetype via reflection?
接口包含其他接口,它们不是从它们派生的,因此在查找它的基本类型时它不会显示。
答案 1 :(得分:4)
接口没有单个基类型,因为它可以实现其他几个接口,例如
public IMyInterface : IDisposable, IComponent
但是,您可以使用GetInterfaces
方法获取这些界面:
var interfaces = typeof(IMyInterface).GetInterfaces();