如何动态获取所有具有指定 class 名称(或通过继承)的现有 classes?

How to get all existing classes with specified class name (or by inheritance) dynamically?

例如,我制作了父级 class CFilter,然后我制作了一些具有相似 class 名称的子级 classes,例如 CFilterNoise、CFilterLines、CFilterFillColor。 我现在不知道我将来会制作多少 classes,但我想为每个 class 创建一个实例,名称为 CFilter*,或者 CFilter 的所有子项在 FOR 或 WHILE 循环中创建一次开始。 我该怎么做?

也许您可以查看程序集以找到所有继承 CFilter 的 class :

foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())// get all assemblies
{
    foreach (Type t in a.GetTypes()) // get all types in the assembly
    {
        if( t.IsSubclassOf(typeof(CFilter) ) )// if the type inherit CFilter
        {
           var instance = (CFilter)Activator.CreateInstance(t);// create an instance ( with the default constructor ) of the type
           // use 'instance'
        }
    }
}

您将无法根据其名称自动为每个 class 创建一个。但是您可以检查 class 是否实现了您想要的接口。你甚至可以把它写成一个扩展方法。

bool IsAFilter<T>(this T myobject)
{
    return (typeof(T).IsAssignableFrom(typeof(CFilter))
}

使用 IsAssignableFrom 会告诉您 class 您是否实现了 CFilter。