繁体   English   中英

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

[英]Method for executing methods with any signature

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

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

我知道可以使用反射来做到这一点,但是我很感兴趣是否有其他方法可以解决此问题,这对性能的影响比使用反射要小。

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

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

代码块1代码块2是相同的,只是using块中的部分不同。 我只想使用一个包含通用代码块的方法,并针对一个方法与另一个方法不同的部分调用不同的方法。 我尝试使用反射,但是它以可见的方式减慢了应用程序的速度,因此我不会使用它。

抱歉,但是如果您将方法名称获取为字符串-> .net反射,则是一种方法。

没有时间研究细节,但是结合使用System.Reflection和Delegate.DynamicInvoke可能会让您有所了解。

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

看一下即兴接口项目及其后期绑定功能。

特别是InvokeMemberInvokeMemberAction方法。 它们比反射快2到4倍。

这样的事情应该起作用...

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM