C# 泛型委托的问题

C# 泛型委托的问题,c#,generics,delegates,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)

我是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;
    }
委托intippcfuncptr(T1参数,T2返回值);
静态int ippcServerRegisterProcedure(int句柄,
字符串过程重命名,ippcFuncPtr过程)
{
返回0;
}
谢谢,
Eyal

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

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;
}
委托intippcfuncptr(T1参数,T2返回值);
静态int-ippcServerRegisterProcedure(int句柄、字符串过程重命名、ippcFuncPtr过程){
返回0;
}

有关详细信息,请参阅MSDN上的和。

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

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;
}
委托intippcfuncptr(T1参数,T2返回值);
静态int-ippcServerRegisterProcedure(int句柄、字符串过程重命名、ippcFuncPtr过程){
返回0;
}

有关更多信息,请参阅MSDN上的和。

问题在于您尚未在
ippcServerRegisterProcedure
函数上定义T1和T2通用参数。试着这样做:

static int ippcServerRegisterProcedure<in T1, in T2>(
    int handle, 
    string procedureName, 
    ippcFuncPtr<in T1, in T2> procedure
)
{
      return 0;
}
static int ippcServerRegisterProcedure(
int句柄,
字符串过程重命名,
ippcFuncPtr程序
)
{
返回0;
}

问题在于您尚未在
ippcServerRegisterProcedure
函数上定义T1和T2通用参数。试着这样做:

static int ippcServerRegisterProcedure<in T1, in T2>(
    int handle, 
    string procedureName, 
    ippcFuncPtr<in T1, in T2> procedure
)
{
      return 0;
}
static int ippcServerRegisterProcedure(
int句柄,
字符串过程重命名,
ippcFuncPtr程序
)
{
返回0;
}

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

static int ippcServerRegisterProcedure<T1, T2>(int handle, string procedureName,
                                               ippcFuncPtr<T1, T2> procedure)
静态int-ippcServerRegisterProcedure(int句柄、字符串过程重命名、,
ippcFuncPtr程序)
我还强烈建议您遵循.NET命名约定-并尽可能使用标准委托。。。因此,在这种情况下:

static int RegisterIpccServerProcedure<T1, T2>(int handle, string procedureName,
                                               Func<T1, T2, int> procedure)
static int RegisterIpccServerProcedure(int句柄、字符串过程重命名、,
Func程序)

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

static int ippcServerRegisterProcedure<T1, T2>(int handle, string procedureName,
                                               ippcFuncPtr<T1, T2> procedure)
静态int-ippcServerRegisterProcedure(int句柄、字符串过程重命名、,
ippcFuncPtr程序)
我还强烈建议您遵循.NET命名约定-并尽可能使用标准委托。。。因此,在这种情况下:

static int RegisterIpccServerProcedure<T1, T2>(int handle, string procedureName,
                                               Func<T1, T2, int> procedure)
static int RegisterIpccServerProcedure(int句柄、字符串过程重命名、,
Func程序)

Hi Rich,我得到以下信息:错误2找不到类型或命名空间名称“T1”(是否缺少using指令或程序集引用?)D:\Eyal\c.sharp\tests\ippc\ippcRemoteTest\ippc\u server.cs 174 89 ippcRemoteTestHi Rich,我得到以下信息:错误2找不到类型或命名空间名称“T1”(是否缺少using指令或程序集引用?)D:\Eyal\c.sharp\tests\ippc\ippcRemoteTest\ippc_server.cs 174 89 ippcRemoteTest感谢Jon的解释和建议。我会尽量了解.NET命名约定。顺便说一句-为什么要添加Func而不是Func?@Eyalk:因为您的委托类型返回int,而不是T2。感谢Jon的解释和建议。我会尽量了解。NET naming conventions.BTW-为什么要添加Func而不是Func?@Eyalk:因为委托类型返回int,而不是T2。