Обычно вы разрешаете всем классам, вы хотите создать это динамически, реализуете общий интерфейс, скажем, IMyInterface
. Вы можете создать экземпляр из строки имени класса следующим образом:
Assembly asm = Assembly.GetExecutingAssembly();
string classname = "MyNamespace.MyClass";
Type classtype = asm.GetType(classname);
// Constructor without parameters
IMyInterface instance = (IMyInterface)Activator.CreateInstance(classtype);
// With parameters (eg. first: string, second: int):
IMyInterface instance = (IMyInterface)Activator.CreateInstance(classtype,
new object[]{
(object)"param1",
(object)5
});
Даже если у вас нет общего интерфейса, но вы знаете имя метода (в виде строки), вы можете вызывать свои методы следующим образом (очень похоже на свойства, события и т. Д.):
object instance = Activator.CreateInstance(classtype);
int result = (int)classtype.GetMethod("TwoTimes").Invoke(instance,
new object[] { 15 });
// result = 30
Пример класса:
namespace MyNamespace
{
public class MyClass
{
public MyClass(string s, int i) { }
public int TwoTimes(int i)
{
return i * 2;
}
}
}