奇怪的是,我找不到类似的问题,但这正是我真正想要的,找到派生类的所有父类。
我测试了一个代码,希望它能为我工作:
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{}
基本上,我的主要意图是检查派生类是否以某种方式继承了其基本层次结构中的某个基类。
但是,此代码返回null,并且仅适用于接口。
听起来你实际上并不需要所有其他类型——你只需要Type.IsSubclassOf
或Type.IsAssignableFrom
。然而,使用Type.BaseType
:很容易获得层次结构中的所有类型
public static IEnumerable<Type> GetClassHierarchy(Type type)
{
while (type != null)
{
yield return type;
type = type.BaseType;
}
}