Функция VB.NET, которая принимает другие функции в качестве параметра и выполняет их - PullRequest
5 голосов
/ 29 апреля 2010

Есть ли способ на vb.net создать подпрограмму / функцию, которая будет принимать в качестве аргумента какой-то указатель на другую функцию и позволять этой новой подпрограмме / функции выполнять переданную функцию?

У меня есть 10-12 функций xml-rpc, которые я вызываю на удаленном сервере. Каждая из этих функций имеет разные списки аргументов (одна принимает 1 строку, другая может принимать 3 строки и одну int и т. Д.). Все они возвращают объект.

Как я их называю, кажется, что это должно быть в состоянии быть лучше учтено. Например, каждый раз, когда я вызываю любую из этих функций, я хочу проверить возвращаемое значение для удаления сеанса и сделать что-то, чтобы попытаться повторно подключиться к удаленной системе и т. Д.

Использование .net 3.5

Спасибо!

-R

Ответы [ 4 ]

16 голосов
/ 29 апреля 2010

Вы должны быть доставлены ... в Func 'город

4 голосов
/ 29 апреля 2010
Public Sub DoSomething(outerFunction as Func(of T))
    ' do something

    ' call passed in function
    Dim value = outerFunction
End Sub
3 голосов
/ 29 апреля 2010

Использование Func<in T, out TResult>

1 голос
/ 03 мая 2010

После еще одного исследования я нашел решение:

Использование функции CallByName:

Ссылка MSDN

Это позволило мне иметь одну функцию, которая фактически выполняла 12 отдельных функций, и позволило мне иметь централизованную систему обработки ошибок:

   Private Function RunRemoteRequest(ByVal functionName As String, ByVal service_url As String, ByVal args() As Object) As Object
    Dim retnVal As Object

    Dim success As Boolean = False
    While success = False And Me._connAttemptCount < MAX_ATTEMPTS
        Try
            retnVal = CallByName(remProxy, functionName, Method, args)
            success = True
            Me._connAttemptCount = 0
        Catch ex As Exception
            Me._connAttemptCount += 1
            If ex.Message = "Error I am looking for" Then
                Me.Login()
            Else
                log.Error("Error in RunRemoteRequest(" & functionName & ").", ex)
            End If
        End Try
    End While

    RunRemoteRequest = retnVal

End Function 

Обратите внимание, что вам необходимо иметь команду Imports Microsoft.VisualBasic.CallType в модуле / классе, над которым вы работаете.

...