我有以下场景:
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"
,我想使用反射创建一个新对象。
这可能吗?
我不认为
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
就很棒。