我是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
答案 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)