2

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

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

我知道这可以使用反射来实现,但如果存在不同的方法,我很感兴趣,这对性能的影响比使用反射要小。

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

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

代码块 1代码块 2是否相同,只有using块中的部分不同。我只想使用一种包含通用代码块的方法,并为从一种方法到另一种方法不同的部分调用不同的方法。我尝试使用反射,但它以可见的方式减慢了应用程序的速度,所以我不会使用它。

4

4 回答 4

1

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

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

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

于 2012-04-30T12:13:38.033 回答
1

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

于 2012-04-30T12:10:27.227 回答
1

没有时间研究细节,但将 System.Reflection 与 Delegate.DynamicInvoke 结合使用可能会让您有所收获。

于 2012-04-30T12:11:29.677 回答
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;
}
于 2012-04-30T12:19:38.403 回答