对于一个对象,我可以使用reflection或其他方式获得其所有的子类?

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

您可以在Assembly中加载所有types,然后枚举它们以查看哪些实现了对象的types。 你说'对象',所以下面的代码示例不适用于接口。 此外,此代码示例仅search与声明对象相同的程序集。

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

或者如注释中所示,使用此代码示例search所有加载的程序集。

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

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

子类的含义接口? 是:

 this.GetType().GetInterfaces() 

子类的基本types? 那么,C#只能有一个基类

子类是指从你的类inheritance的所有类? 是:

编辑:(谢谢vcsjones)

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

并为所有加载的程序集