繁体   English   中英

接口的类层次结构C#

[英]Class Hierarchy for Interfaces C#

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

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

接口不是从Object派生的,因此在输出它的基础时它不会显示。 以下是Eric Lippert对从Object派生的东西(以及可转换为Object类型的东西)的评论。

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

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

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

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

接口没有单一的基本类型,因为它可以实现其他几个接口,例如

public IMyInterface : IDisposable, IComponent

但是,您可以使用GetInterfaces方法获取这些接口:

var interfaces = typeof(IMyInterface).GetInterfaces();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM