Ответ 1
Попробуйте Activator.CreateInstance(Type)
Мне нужно инсталировать тип С# динамически, используя отражение. Вот мой сценарий: я пишу базовый класс, который должен будет создать экземпляр определенного объекта как часть его инициализации. Базовый класс не будет знать, какой тип объекта он должен создать, но производный класс будет. Итак, я хочу, чтобы производный класс передавал тип базовому классу в вызове base(). Код выглядит примерно так:
public abstract class MyBaseClass
{
protected MyBaseClass(Type myType)
{
// Instantiate object of type passed in
/* This is the part I'm trying to figure out */
}
}
public class MyDerivedClass : MyBaseClass
{
public MyDerivedClass() : base(typeof(Whatever))
{
}
}
Другими словами, базовый класс делегирует его производному типу выбор типа объекта, который должен быть создан.
Может ли кто-нибудь помочь?
Попробуйте Activator.CreateInstance(Type)
Вы ищете Activator.CreateInstance
object instance = Activator.CreateInstance(myType);
Существуют различные перегрузки этого метода, которые могут принимать аргументы конструктора или другую информацию для поиска типа (например, имена в строковой форме)
Вместо этого вы можете использовать дженерики:
public abstract class MyBaseClass<T> where T : new()
{
protected MyBaseClass()
{
T myObj = new T();
// Instantiate object of type passed in
/* This is the part I'm trying to figure out */
}
}
public class MyDerivedClass : MyBaseClass<Whatever>
{
public MyDerivedClass()
{
}
}
Для поддержки конструкции new T()
требуется where T : new()
.