проблема с дженериком делегата - PullRequest
1 голос
/ 15 августа 2010

Я новичок в c #.Я пытаюсь объявить функцию делегата, которая принимает 2 обобщенных ввода.У меня проблемы с компиляцией.Может кто-нибудь сказать мне, в чем здесь проблема.

Ответы [ 3 ]

2 голосов
/ 15 августа 2010

Проблема в том, что вы не определили общие аргументы T1 и T2 в функции ippcServerRegisterProcedure.Попробуйте вот так:

static int ippcServerRegisterProcedure<in T1, in T2>(
    int handle, 
    string procedureName, 
    ippcFuncPtr<in T1, in T2> procedure
)
{
      return 0;
}
2 голосов
/ 15 августа 2010

Вы должны явно объявить параметры типа в методе, например так:

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;
}

См. Общие делегаты (Руководство по программированию в C #) и Общие методы (Руководство по программированию в C #) в MSDN для получения дополнительной информации.

1 голос
/ 15 августа 2010

Вам не нужно повторно объявлять контравариантность в параметре, но вам нужно указать параметры типа метода, если только он не является универсальным:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...