如何在C#Reflection中获取派生类的所有父类

Tar*_*rik 0 c# reflection interface

奇怪的是,我无法找到类似的问题,但这实际上是我想要的,找到派生类的所有父类.

我测试了一个代码,希望它对我有用:

void WriteInterfaces()
{
    var derivedClass = new DerivedClass();
    var type = derivedClass.GetType();
    var interfaces = type.FindInterfaces((objectType, criteria) =>
                                            objectType.Name == criteria.ToString(),"BaseClass");

    foreach(var face in interfaces)
    {
        face.Name.Dump();
    }
}

interface BaseInterface
{}

class BaseClass : BaseInterface {}

class BaseClass2 : BaseClass {}

class DerivedClass : BaseClass2{}
Run Code Online (Sandbox Code Playgroud)

基本上,这里我的主要目的是检查派生类是否以某种方式在其基础层次结构中的某处继承基类.

但是,此代码返回null并仅适用于接口.

Jon*_*eet 5

听起来你实际上并不需要所有其他类型 - 你只需要Type.IsSubclassOfType.IsAssignableFrom.但是,使用Type.BaseType以下方法可以轻松获取层次结构中的所有类型:

public static IEnumerable<Type> GetClassHierarchy(Type type)
{
    while (type != null)
    {
        yield return type;
        type = type.BaseType;
    }
}
Run Code Online (Sandbox Code Playgroud)