对于一个对象,我可以使用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; } }
并为所有加载的程序集