将不同的方法作为参数传递,以通过方法名称调用

时间:2013-06-18 06:43:57

标签: c# delegates

我在 Util 类中有几个方法,它们具有不同的返回类型和不同的参数,f.e:

int RealMethodToExecute(int i, string s) { ... }

必须在ui线程中调用这些方法,并且调用看起来像这样:

int x = (int)InvokeControl.Invoke("Util.RealMethodToExecute");

因为在我看来使用方法名称作为字符串并不是很漂亮,我想到了以下解决方案:

public int WrappedRealMethodToExecute(int i, string s)
{
    return InvokeMethod(Util.RealMethodToExecute, i, s);
}

private static T InvokeMethod<T>(Func<int, string, T> func, params object[] p)
{            
    return (T)InvokeControl.Invoke(func.Method.DeclaringType.FullName + "." + func.Method.Name, p);
}

现在的问题是 InvokeMethod 只接受带有int和string参数以及返回值的方法,但我有不同的方法要执行。

我不想重载 InvokeMethod 。我只需要函数的完全限定名来执行它。

任何想法??

编辑:带参数的扩展示例

1 个答案:

答案 0 :(得分:0)

有趣的是,这可能只是:

private static object InvokeMethod(Delegate method, params object[] args)
{            
    return InvokeControl.Invoke(method, args);
}

InvokeControl.Invoke使用(进入UI线程):

someControl.Invoke(method, args);