📅  最后修改于: 2023-12-03 15:13:52.450000             🧑  作者: Mango
在 C# 中,可以通过反射的方式获取某个类的所有子类。这对于某些需要动态加载类的应用场景很有用。
public static List<Type> GetAllSubclasses(Type parentType)
{
var result = new List<Type>();
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (var assembly in assemblies)
{
try
{
var types = assembly.GetTypes();
foreach (var type in types)
{
if (type.IsSubclassOf(parentType))
{
result.Add(type);
}
}
}
catch (ReflectionTypeLoadException)
{
// Ignore assemblies that can't be loaded
}
}
return result;
}
以上代码中,我们首先定义了一个 GetAllSubclasses
方法,接收一个 Type
类型的参数 parentType
(即要查找子类的父类),返回一个 List<Type>
类型的结果。
接着,我们使用 AppDomain.CurrentDomain.GetAssemblies()
方法获取当前应用程序的所有程序集,并遍历每个程序集。在每个程序集中,我们使用 assembly.GetTypes()
方法获取该程序集中的所有类型,并遍历每个类型。如果该类型是 parentType
的子类,则将其加入结果集中。
最后,我们返回结果集。
var subClasses = GetAllSubclasses(typeof(Foo));
以上代码将获取所有继承自 Foo
的子类。如果需要获取所有的子类,则可以将 typeof(Foo)
替换为 typeof(object)
。