获取类型的继承树

时间:2011-04-19 13:13:03

标签: c# reflection inheritance

  

可能重复:
  To get parent class using Reflection on C#

我试图找到一种使用C#中的反射来获取某种类型的继承树的简单方法。

假设我有以下课程;

public class A
{ }

public class B : A
{ }

public class C : B
{ }

如何在类型'C'上使用反射来确定其超类是'B',谁又来自'A'等等?我知道我可以使用'IsSubclassOf()',但我们假设我不知道我正在寻找的超类。

2 个答案:

答案 0 :(得分:23)

要获取类型的直接父级,可以使用Type.BaseType属性。您可以迭代地调用BaseType,直到它返回null以继续执行类型的继承层次结构。

例如:

public static IEnumerable<Type> GetInheritanceHierarchy
    (this Type type)
{
    for (var current = type; current != null; current = current.BaseType)
        yield return current;
}

请注意,使用System.Object作为终点是无效的,因为并非所有类型(例如,接口类型)都从它继承。

答案 1 :(得分:3)

类型为System.Type的对象具有名为BaseType的属性,该属性返回“当前System.Type直接继承的类型”。你可以走这条BaseType链,直到你得到null,此时你知道你已经到达System.Object