如何将方法名称从Config文件添加到委托?

时间:2010-07-20 10:54:25

标签: c# reflection delegates

我必须调用一个名称来自配置文件的方法。我可以使用Reflection.MethodInfo.Invoke()方法实现这一点。但我的情况是所有这些方法应该是相同的签名。我可以使用Delegates实现它吗?但是如何将配置文件中存储的方法名称添加到委托?

2 个答案:

答案 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);