2013-01-15 174 views
0

我有一个泛型类,我想在其中保存一个使用类型T作为参数和返回值的委托。我如何将方法分配给属性getValueDefault?将函数赋值给通用委托

private delegate TOut GetValueDefault<in TIn, TOut>(string key, TIn defaultValue); 

private GetValueDefault<T, T> getValueDefault = null; 

例如带有签名的方法bool ThirdPartyClass.foo(string key, bool defValue)

+0

什么是在这种情况下作为'T'传递的泛型参数?除非它是'object',否则我认为这是不可能的,因为'string'和'bool'与其他类型不兼容。 – cdhowie

回答

1

它应该是那么容易,因为:

private delegate TOut GetValueDefault<in TIn, TOut>(string key, TIn defaultValue); 

private GetValueDefault<int, bool> getValueDefault = afoo; 

static bool ThirdPartyClass.foo(string key, int defValue) 
{ 
    \\... 
} 

然而,如果在所有情况下,你将拥有平等的进出类型参数,您可以将其简化为:

private delegate T GetValueDefault<T>(string key, T defaultValue); 

private static GetValueDefault<bool> getValueDefault = afoo; 
+0

这只适用于'bool',如果'T'是别的,我想在构造函数中分配'(int)ThirdPartyClass.foo2(string key,int defaultValue)'。 – whatever0010011

+0

@MatthiasSchl我已经更新了我的答案,因为它可以处理类型为int的输入参数 – horgh

0

我认为你应该这样写:

class Sample<T> 
{ 
    public delegate TOut GetValueDefault<in TIn, TOut>(string key, TIn defaultValue); 

    private GetValueDefault<T, T> getValueDefault = null; 
    public Sample(GetValueDefault<T, T> del) 
    { 
     getValueDefault = del; 
    } 
}