【问题标题】:Class Hierarchy for Interfaces C#接口 C# 的类层次结构
【发布时间】:2011-01-21 12:26:40
【问题描述】:

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

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 : 基础

这是我所期望的。

但是,如果我尝试对实现另一个接口的接口进行相同操作,即

interface IMyInterface : IDisposable
{
    void Hello();
}

...

OutputClassHierarchy(typeof(IMyInterface));

我得到了输出:

MyNameSpace.IMyInterface : 基础

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

另外,System.Object 在所有这些中在哪里?我以为一切都建立在它之上。

【问题讨论】:

  • 仅供参考,您一直在拼写错误的“层次结构”。记住规则是“我在 E 之前,除非是相反的情况”。
  • 埃里克。都修好了。我也觉得有必要指出错误的拼写。唯一让我烦恼的,是我;不正确,标点符号...!

标签: c# inheritance class interface


【解决方案1】:

接口不是从 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?

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

【讨论】:

    【解决方案2】:

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

    public IMyInterface : IDisposable, IComponent
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      • 2011-05-19
      • 2014-01-21
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      相关资源
      最近更新 更多