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

问题描述 投票:0回答:2

我有以下场景:

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

我正在通过以下方式在另一个类中调用add:

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

我需要一种类似于上面反射语句的方式来使用

Addition(int a)

创建一个 Addition 类型的新对象

所以我有字符串

s= "Addition"
,我想使用反射创建一个新对象。

这可能吗?

c# reflection constructor
2个回答
197
投票

我不认为

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 就很棒。


56
投票

是的,您可以使用

Activator.CreateInstance

© www.soinside.com 2019 - 2024. All rights reserved.