泛型委托的问题

时间:2010-08-15 09:03:41

标签: c# generics delegates

我是c#的新手。我试图声明一个代理函数,它需要2个泛型输入。 我在编译时遇到问题。谁能告诉我这里有什么问题。

delegate int ippcFuncPtr<in T1, in T2>(T1 param, T2 returnval);

static int ippcServerRegisterProcedure(int handle, 
    string procedureName, ippcFuncPtr<in T1, in T2> procedure)
    {
        return 0;
    }

谢谢, 的Eyal

3 个答案:

答案 0 :(得分:2)

您必须在方法上显式声明类型参数,如下所示:

delegate int ippcFuncPtr<in T1, in T2>(T1 param, T2 returnval);

static int ippcServerRegisterProcedure<T1, T2>(int handle, string procedureName, ippcFuncPtr<T1, T2> procedure) {
    return 0;
}

有关详细信息,请参阅MSDN上的Generic Delegates (C# Programming Guide)Generic Methods (C# Programming Guide)

答案 1 :(得分:2)

问题是你没有在ippcServerRegisterProcedure函数上定义T1和T2泛型参数。试试这样:

static int ippcServerRegisterProcedure<in T1, in T2>(
    int handle, 
    string procedureName, 
    ippcFuncPtr<in T1, in T2> procedure
)
{
      return 0;
}

答案 2 :(得分:1)

您不需要重新声明参数中的逆变,但您需要提供方法类型参数,除非它是泛型类型:

static int ippcServerRegisterProcedure<T1, T2>(int handle, string procedureName,
                                               ippcFuncPtr<T1, T2> procedure)

我还强烈建议您遵循.NET命名约定 - 并尽可能使用标准委托......所以在这种情况下:

static int RegisterIpccServerProcedure<T1, T2>(int handle, string procedureName,
                                               Func<T1, T2, int> procedure)