Как создать экземпляр типа динамически с помощью отражения?

Мне нужно инсталировать тип С# динамически, используя отражение. Вот мой сценарий: я пишу базовый класс, который должен будет создать экземпляр определенного объекта как часть его инициализации. Базовый класс не будет знать, какой тип объекта он должен создать, но производный класс будет. Итак, я хочу, чтобы производный класс передавал тип базовому классу в вызове 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))
    {
    }
}

Другими словами, базовый класс делегирует его производному типу выбор типа объекта, который должен быть создан.

Может ли кто-нибудь помочь?

Ответы

Ответ 2

Вы ищете Activator.CreateInstance

object instance = Activator.CreateInstance(myType);

Существуют различные перегрузки этого метода, которые могут принимать аргументы конструктора или другую информацию для поиска типа (например, имена в строковой форме)

Ответ 3

Вместо этого вы можете использовать дженерики:

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().