2013-01-22 37 views
0

這是我的情景:可以通過代理傳遞一個方法嗎?

Class Test 
{ 
    public int TestMethod(string s) 
    { 
     return s.length; 
    } 

    public void TestInvoker() 
    {  
     var result = Invoker.Call((new Test()).TestMethod,"String"); 
    } 
} 

Class Invoker 
{ 
    public static object Call(Delegate method, object input) {... Do stuff ...} 

} 

我怎樣才能做到這一點?因爲「TestMethod」不是一個委託,我可以使用Func <>,但是我希望每次使用調用者時都要避免安裝一個Func代理。

這可能嗎?

回答

2

這是可能的,但只有當方法接受具體的委託類型;不是Delegate本身。

如果你改變你的方法

public static TReturn Call<TInput, TReturn>(Func<TInput, TReturn> method, TInput input) 

,它會正常工作。


更確切地說,C#有一個從方法組到隱式的從一個匹配委託類型的轉換。

+0

謝謝,我已經懷疑......但我認爲這可能存在一些伎倆!謝謝! – Coastpear

+0

格拉西亞斯! =)這就是我想避免「強制」一個Func委託。不過謝謝! – Coastpear

相關問題