Это довольно просто. Предположим, что ваше имя класса Car
и пространство имен Vehicles
, затем передайте параметр как Vehicles.Car
, который возвращает объект типа Car
. Таким образом, вы можете динамически создавать любой экземпляр любого класса.
public object GetInstance(string strFullyQualifiedName)
{
Type t = Type.GetType(strFullyQualifiedName);
return Activator.CreateInstance(t);
}
Если ваше Полное имя (т.е. Vehicles.Car
в данном случае) находится в другой сборке, Type.GetType
будет нулевым. В таких случаях вы просматриваете все сборки и находите Type
. Для этого вы можете использовать следующий код
public object GetInstance(string strFullyQualifiedName)
{
Type type = Type.GetType(strFullyQualifiedName);
if (type != null)
return Activator.CreateInstance(type);
foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
{
type = asm.GetType(strFullyQualifiedName);
if (type != null)
return Activator.CreateInstance(type);
}
return null;
}
Теперь, если вы хотите вызвать параметризованный конструктор , сделайте следующее
Activator.CreateInstance(t,17); // Incase you are calling a constructor of int type
вместо
Activator.CreateInstance(t);