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

时间:2015-02-10 18:54:02

标签: c# class inheritance unity3d

例如,我创建了父类CFilter,然后我创建了一些具有相似类名的子类,例如CFilterNoise,CFilterLines,CFilterFillColor。 我现在不会在将来制作多少个类,但我想为每个具有CFilter *名称的类创建一个实例,或者在开始时为FOR或WHILE循环创建CFilter的所有子类。 我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

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

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'
        }
    }
}

答案 1 :(得分:0)

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

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

使用IsAssignableFrom会告诉您您所在的类是否实现了CFilter。