接口的类层次结构C#

时间:2010-02-26 15:52:49

标签: c# inheritance class interface

我正在使用一些类和接口,并开发了一种简单的方法来确定类的层次结构,即识别继承链。

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在哪里?我以为一切都建立在它之上。

2 个答案:

答案 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();