关于c#:对于一个对象,我可以使用反射或其他方式获取所有子类吗?

For an object, can I get all its subclasses using reflection or other ways?

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


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

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

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

1
2
3
4
5
var subclasses =
from assembly in AppDomain.CurrentDomain.GetAssemblies()
    from type in assembly.GetTypes()
    where type.IsSubclassOf(typeof(A))
    select type

这两个代码示例都要求您添加using System.Linq;


子类表示接口?对:

1
this.GetType().GetInterfaces()

子类表示基类型?好吧,C只能有一个基类

子类是指从类继承的所有类?对:

编辑:(谢谢VCSjones)

1
2
3
4
5
6
7
8
foreach(var asm in AppDomain.CurrentDomain.GetAssemblies())
{
        foreach (var type in asm.GetTypes())
        {
            if (type.BaseType == this.GetType())
                yield return type;
        }
}

对所有加载的程序集执行此操作