Есть ли способ упростить использование общего делегата? - PullRequest
0 голосов
/ 12 октября 2011

У меня есть следующие методы, которые работают:

Private Delegate Function WebMethodDelegate(Of TRequest, TResponse)(ByVal request As TRequest) As TResponse

Private Function CallWebMethod(Of TRequest, TResponse)(ByVal request As TRequest, ByVal theMethodToRun As WebMethodDelegate(Of TRequest, TResponse)) As TResponse

    Dim response As TResponse = Nothing

'begin pseudocode
    While somtthing is true

            response = theMethodToRun.Invoke(Request)

    End While
'end pseudocode

End Function

Я звоню выше с (уродливый звонок):

Dim webMethodDeletgate As New WebMethodDelegate(Of wsLookupServiceProxy.RequestBase, wsLookupServiceProxy.GetSelectedLookupInfoResponseOfTitle)(AddressOf _service.GetAllTitles)
CallWebMethod(Of wsLookupServiceProxy.RequestBase, wsLookupServiceProxy.GetSelectedLookupInfoResponseOfTitle)(request, webMethodDeletgate)

Я думал об этом:

Dim requestType As Type = GetType(wsLookupServiceProxy.RequestBase)
Dim responseType As Type = GetType(wsLookupServiceProxy.GetSelectedLookupInfoResponseOfTitle)

Dim webMethodDeletgate As New WebMethodDelegate(Of requestType, responseType)(AddressOf _service.GetAllTitles)
CallWebMethod(Of requestType, responseType)(request, webMethodDeletgate)

Но компилятору это не понравилось.

Я задавался вопросом, может ли кто-нибудь предоставить более чистый способ вызова метода, не имея слишком длинного вызова метода?

Заранее спасибо.

1 Ответ

1 голос
/ 12 октября 2011

Ну, используя

Imports wsLookupServiceProxy

в верхней части вашего класса вы можете получить это до

Dim webMethodDeletgate As New WebMethodDelegate(Of RequestBase, GetSelectedLookupInfoResponseOfTitle)(AddressOf _service.GetAllTitles)
CallWebMethod(request, webMethodDeletgate)

Вы также можете удалить (Of TResult, TResponse) из вызова метода, поскольку они определяются из webMehtodDelegate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...