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