使用ConstructorInfo调用构造函数的反射

时间:2012-11-23 05:37:09

标签: c# .net visual-studio-2010 reflection .net-4.0

在如下的非常简单的课程中,

class Program 
{

    public Program(int a, int b, int c)
    {
        Console.WriteLine(a);
        Console.WriteLine(b);
        Console.WriteLine(c);
    }
 }

我使用反射来调用构造函数

像这样......

   var constructorInfo = typeof(Program).GetConstructor(new[] { typeof(int), typeof(int),      typeof(int) });
        object[] lobject = new object[] { };
        int one = 1;
        int two = 2;
        int three = 3;
        lobject[0] = one;
        lobject[1] = two;
        lobject[2] = three;

        if (constructorInfo != null)
        {
            constructorInfo.Invoke(constructorInfo, lobject.ToArray);
        }

但是我收到一条错误,说“对象与目标类型构造函数信息不匹配”。

任何帮助/评论非常感谢。 提前谢谢。

1 个答案:

答案 0 :(得分:13)

一旦调用构造函数,就不需要将constructorInfo作为参数传递,而不是对象的实例方法。

var constructorInfo = typeof(Program).GetConstructor(
                          new[] { typeof(int), typeof(int), typeof(int) });
if (constructorInfo != null)
{
    object[] lobject = new object[] { 1, 2, 3 };
    constructorInfo.Invoke(lobject);
}

KeyValuePair<T,U>

public Program(KeyValuePair<int, string> p)
{
    Console.WriteLine(string.Format("{0}:\t{1}", p.Key, p.Value));
}

static void Main(string[] args)
{
    var constructorInfo = typeof(Program).GetConstructor(
                             new[] { typeof(KeyValuePair<int, string>) });
    if (constructorInfo != null)
    {
        constructorInfo.Invoke(
            new object[] { 
                new KeyValuePair<int, string>(1, "value for key 1") });
    }

    Console.ReadLine();
}