📌  相关文章
📜  C# 获取一个类的所有子类 - C# (1)

📅  最后修改于: 2023-12-03 15:13:52.450000             🧑  作者: Mango

C# 获取一个类的所有子类

简介

在 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)