我必须调用一个名称来自配置文件的方法。我可以使用Reflection.MethodInfo.Invoke()方法实现这一点。但我的情况是所有这些方法应该是相同的签名。我可以使用Delegates实现它吗?但是如何将配置文件中存储的方法名称添加到委托?
答案 0 :(得分:1)
在MSDN上查看Delegate.CreateDelegate。那里有一些最好的文档!
答案 1 :(得分:1)
如果您愿意,可以创建一个可重复使用的代理,例如鉴于我的类型:
public class MyClass
{
public void DoSomething(string argument1, int argument2)
{
Console.WriteLine(argument1);
Console.WriteLine(argument2);
}
}
我可以这样做:
Action<object, MethodInfo, string, int> action =
(obj, m, arg1, arg2) => m.Invoke(obj, new object[] { arg1, arg2 });
并将其命名为:
var method = typeof(MyClass).GetMethod("DoSomething");
var instance = new MyClass();
action(instance, method, "Hello", 24);
如果您知道您的方法有返回类型,则可以使用System.Func
委托执行此操作:
public class MyClass
{
public string DoSomething(string argument1, int argument2)
{
return string.Format("{0} {1}", argument1, argument2);
}
}
Func<object, MethodInfo, string, int, string> func =
(obj, m, arg1, arg2) => (string)m.Invoke(obj, new object[] { arg1, arg2 });
string result = func(instance, method, "Hello", 24);