Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Activator.CreateInstance failing

Tags:

c#

I have am creating an Instance dynamically using Activator.CreateInstance. However, it is saying object cannot be null on every attempt. Pasting the code below. Am I doing anything wrong?

Is there any problem if

Activator.CreateInstance

replaces the conventional switch/case statements for determining the object type in the run-time? Thanks.

public abstract  class Base
{
    public abstract void Func();

}
public  class  Derived:Base
{
    public override void Func()
    {
        MessageBox.Show("Derived First");
    }
}

public class Derived2 : Base
{
    public override void Func()
    {
        MessageBox.Show("Derived Second");
    }
}

private void button1_Click(object sender, EventArgs e)
{
    // I was trying to make use of the overladed version 
    // where it takes the Type as parameter.
    BaseClass report = 
       (BaseClass) Activator.CreateInstance(Type.GetType("Derived")); 
    report.Func();
}
like image 865
logeeks Avatar asked Jan 23 '12 09:01

logeeks


2 Answers

From the documentation of the typeName parameter of Type.GetType:

The assembly-qualified name of the type to get. See AssemblyQualifiedName. If the type is in the currently executing assembly or in Mscorlib.dll, it is sufficient to supply the type name qualified by its namespace.

This means that you need to (at least) pass the namespace as well:

BaseClass report = (BaseClass) Activator.CreateInstance(Type.GetType("YourNamespace.Derived")); 
like image 99
Fredrik Mörk Avatar answered Sep 30 '22 02:09

Fredrik Mörk


Well, Type.GetType("Derived") is almost certainly returning null - which would make it nothing to do with Activator.CreateInstance.

Check:

  • Is Derived in the same assembly as the calling code? If not, use Assembly.GetType on the right assembly, or include the assembly name in the type name you're passing to Type.GetType()
  • Is your type in a namespace? If so, you need to namespace-qualify it
like image 37
Jon Skeet Avatar answered Sep 30 '22 04:09

Jon Skeet