使用C#反射来调用构造函数

时间:2010-07-15 12:59:12

标签: c# reflection constructor

我有以下情况:

class Addition{
 public Addition(int a){ a=5; }
 public static int add(int a,int b) {return a+b; }
}

我通过以下方式调用另一个类:

string s="add";
typeof(Addition).GetMethod(s).Invoke(null, new object[] {10,12}) //this returns 22

我需要一种类似于上面的反射语句的方法来创建一个使用Addition(int a)

的Addition类型的新对象

所以我有字符串s= "Addition",我想用反射创建一个新对象。

这可能吗?

2 个答案:

答案 0 :(得分:151)

我认为GetMethod不会这样做,不会 - 但GetConstructor会。

using System;
using System.Reflection;

class Addition
{
    public Addition(int a)
    {
        Console.WriteLine("Constructor called, a={0}", a);
    }
}

class Test
{
    static void Main()
    {
        Type type = typeof(Addition);
        ConstructorInfo ctor = type.GetConstructor(new[] { typeof(int) });
        object instance = ctor.Invoke(new object[] { 10 });
    }
}

编辑:是的,Activator.CreateInstance也可以。如果您希望对事物有更多控制权,请使用GetConstructor,找出参数名称等。Activator.CreateInstance非常棒,如果只是想要调用构造函数。

答案 1 :(得分:43)

是的,您可以使用Activator.CreateInstance