是否可以将方法作为Delegate传递?

时间:2013-01-22 20:56:11

标签: c# generics methods casting delegates

这是我的情景:

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<>每次我使用调用者时委托。

这可能吗?

1 个答案:

答案 0 :(得分:2)

这是可能的,但前提是该方法接受具体的委托类型;不是Delegate本身。

如果您将方法更改为

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

,它会正常工作。


更确切地说,C#具有从方法组到匹配委托类型的隐式转换。