执行具有任何签名的方法的方法

时间:2012-04-30 12:06:13

标签: c# reflection methods method-signature

是否有可能实现一个方法,该方法将方法名称和方法调用的参数集作为参数,执行方法并返回从方法执行中获得的返回值?

此方法应该用于调用具有任意数量和类型的参数以及任何返回类型的方法。

我知道这可以使用反射进行,但我感兴趣的是,如果存在不同的方法,那么对性能的影响要小于使用反射。

稍后编辑: 我需要实现这样的方法,因为我有一个具有许多不同方法和不同方法签名的类,但是它们中的大多数具有相同的格式:

{    
  //code block 1
}
using (SomeObject obj = InitializeObject(){
   ...
   //some operations
   ...
}
{
   //code block 2
}

代码块1 代码块2 是相同的,只有使用块中的部分不同。 我想只使用一个包含公共代码块的方法,并为不同方法的部分调用不同的方法。 我尝试使用反射,但它以可见的方式减慢了应用程序,因此我不会使用它。

4 个答案:

答案 0 :(得分:1)

很抱歉,如果您将方法名称设为字符串 - > .net反思是要走的路。

答案 1 :(得分:1)

没有时间研究细节,但将System.Reflection与Delegate.DynamicInvoke结合使用可能会让你到处。

答案 2 :(得分:1)

您可以利用.NET 4.0中的最新DLR功能

查看impromptuinterface项目及其后期绑定功能。

具体为InvokeMemberInvokeMemberAction方法。这些比反射快2到4倍。

答案 3 :(得分:1)

这样的事情应该有用......

public static string ExecMethodByName
    (string typeName, string methodName, string stringParam)
{
    Type t = Type.GetType(typeName);

    String s = (String)t.InvokeMember(
                    methodName,
                    BindingFlags.InvokeMethod | BindingFlags.Public | 
                        BindingFlags.Static,
                    null,
                    null,
                    new Object[] { stringParam });

    return s;
}