请考虑以下代码:
public abstract class BaseClass {
abstract void DoWork();
virtual void MoreWork() {
Console.WriteLine("MoreWork");
}
}
public class classA : BaseClass {
public void DoWork() { DoStuffA(); }
}
public class classB : BaseClass {
public void DoWork() { DoStuffB(); }
}
我想要一个方法,我想传递所有这些类型并让它们实例化。
void Initialize(params BaseClass[] lst) {
for (int i = 0; i < objectList.Length; i++) {
Activator.CreateInstance(objectList[i]); // not sure if this works.
}
}
Initialize(classA, classB);
如何实现这样的目标呢?
答案 0 :(得分:2)
您不应该将对象实例发送到initialize方法,而是它们的类型。
void Initialize(params Type[] lst) {
foreach(Type type in lst) {
Activator.CreateInstance(type);
}
}
Initialize(typeof(classA), typeof(classB));
这是一个完整的例子:
public Form1()
{
InitializeComponent();
Initialize(typeof(ClassA), typeof(ClassB));
}
public class BaseClass { }
public class ClassA : BaseClass { }
public class ClassB : BaseClass { }
public BaseClass[] Initialize(params Type[] lst)
{
// if we already know the item count, why not set the capacity of the list.
List<BaseClass> instances = new List<BaseClass>(lst.Length);
foreach (Type type in lst)
if (type.IsSubclassOf(typeof(BaseClass)))
instances.Add((BaseClass)Activator.CreateInstance(type));
return instances.ToArray();
}