Вы можете добавить параметр Object[]
в метод, который будет представлять параметры для конструктора объекта, который вы хотите создать. Затем, когда вы вызываете Activator.CreateInstance
, вы можете передать этот массив, и Activator
сделает все возможное, чтобы найти конструктор указанного вами типа, который соответствует типам в массиве Object
.
Вот очень упрощенный пример того, что я имею в виду:
using System;
class Program
{
static void Main()
{
Foo foo = (Foo)create("Foo", new Object[] { });
Bar bar = (Bar)create("Bar", new Object[] { "hello bar" });
Baz baz = (Baz)create("Baz", new Object[] { 2, "hello baz" });
}
static Object create(String typeName, Object[] parameters)
{
return Activator.CreateInstance(Type.GetType(typeName), parameters);
}
}
class Foo
{
public Foo() { }
}
class Bar
{
public Bar(String param1) { }
}
class Baz
{
public Baz(Int32 param1, String param2) { }
}
У нас есть три типа, у каждого из которых разные конструкторы - если вызывающая сторона отвечает за отправку имени типа, то они также будут отвечать за предоставление массива Objects
, который будет удовлетворять конструктору, отличному от заданного по умолчанию.