Как создать экземпляр типа динамически, используя отражение? - PullRequest
21 голосов
/ 31 марта 2011

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

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

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

Ответы [ 3 ]

55 голосов
/ 31 марта 2011

Попробуйте Activator.CreateInstance(Type)

http://msdn.microsoft.com/en-us/library/wccyzw83.aspx

19 голосов
/ 31 марта 2011

Вы ищете Activator.CreateInstance

object instance = Activator.CreateInstance(myType);

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

15 голосов
/ 31 марта 2011

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

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() 
    {
    }
}

where T : new() требуется для поддержки конструкции new T().

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