簡體   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