接口的类层次结构C#

Jam*_*man 5 c# inheritance interface class

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

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);
}
Run Code Online (Sandbox Code Playgroud)

因此对于

OutputClassHierarchy(typeof(System.Exception));
Run Code Online (Sandbox Code Playgroud)

我得到输出:

System.Exception:System.Object

System.Object:Base

这是我的期望.

但是,如果我尝试使用实现另一个接口的接口,即

interface IMyInterface : IDisposable
{
    void Hello();
}

...

OutputClassHierarchy(typeof(IMyInterface));
Run Code Online (Sandbox Code Playgroud)

我得到输出:

MyNameSpace.IMyInterface:Base

那么,这里发生了什么?是否有可能推断出上面声明的接口层次结构,或者在接口方面没有这样的东西?

还有,System.Object这一切在哪里?我以为一切都建立在它之上.

kem*_*002 4

接口不是从 Object 派生的,因此当您输出它的基类时它不会显示。这是 Eric Lippert 对从 Object 派生的事物(以及可转换为 Object 类型的事物)的评论。

http://blogs.msdn.com/ericlippert/archive/2009/08/06/not-everything-derives-from-object.aspx

这个答案可能有助于回答您有关包含其他接口的接口的问题:

如何通过反射获取接口基类型?

接口包含其他接口,它们不派生自它们,因此在查找其基类型时不会显示。