David Veeneman
David Veeneman

Reputation: 19132

How to instantiate a type dynamically using reflection?

I need to instatiate a C# type dynamically, using reflection. Here is my scenario: I am writing a base class, which will need to instantiate a certain object as a part of its initialization. The base class won't know what type of object it is supposed to instantiate, but the derived class will. So, I want to have the derived class pass the type to the base class in a base() call. The code looks something like this:

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

In other words, the base class is delegating to its derived type the choice of the object type to be instantiated.

Can someone please assist?

Upvotes: 33

Views: 39328

Answers (3)

stusherwin
stusherwin

Reputation: 1896

Try Activator.CreateInstance(Type)

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

Upvotes: 76

Kirk Woll
Kirk Woll

Reputation: 77606

You might want to use generics instead:

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

The where T : new() is required to support the new T() construct.

Upvotes: 19

JaredPar
JaredPar

Reputation: 755457

You're looking for Activator.CreateInstance

object instance = Activator.CreateInstance(myType);

There are are various overloads of this method that can take constructor arguments or other information to find the type (such as names in string form)

Upvotes: 26

Related Questions