对于一个对象,我可以使用反射或其他方式获得它的所有子类吗

本文关键字:方式获 子类 其他 一个对象 我可以 可以使 反射 | 更新日期: 2023-09-27 18:20:59

对于一个对象,我可以使用反射获得它的所有子类吗?

对于一个对象,我可以使用反射或其他方式获得它的所有子类吗

您可以加载Assembly中的所有类型,然后枚举它们以查看哪些类型实现了对象的类型。您说的是"object",所以下面的代码示例不适用于接口。此外,此代码示例只搜索与对象在.中声明的程序集相同的程序集

class A
{}
...
typeof(A).Assembly.GetTypes().Where(type => type.IsSubclassOf(typeof(A)));

或者,按照注释中的建议,使用此代码示例搜索所有加载的程序集。

var subclasses =
from assembly in AppDomain.CurrentDomain.GetAssemblies()
    from type in assembly.GetTypes()
    where type.IsSubclassOf(typeof(A))
    select type

两个代码示例都需要添加using System.Linq;

获取子类:

foreach(var asm in AppDomain.CurrentDomain.GetAssemblies())
{
        foreach (var type in asm.GetTypes())
        {
            if (type.BaseType == this.GetType())
                yield return type;
        }
}

并对所有加载的组件执行此操作

您还可以获得接口:

this.GetType().GetInterfaces()

相反(获取基类),C#只能有一个基类。