2010-04-29 111 views
5

有沒有在vb.net中創建一個子/函數,將作爲參數某種類型的指針指向另一個函數,並允許這個新的子/函數來執行傳遞函數?VB.NET函數,將其他函數作爲參數,並執行它們

我所擁有的是10-12 xml-rpc函數我正在調用遠程服務器。每個函數都有不同的參數列表(一個需要1個字符串,另一個可能需要3個字符串和一個int等)。他們都返回一個對象。

正如我所說的那樣,它似乎應該能夠更好地被分解。舉例來說,每次我打電話任何這些功能,我想測試一個會話中丟棄的返回值,並做一些嘗試重新連接到遠程系統等

使用.net 3.5

謝謝!

-R

回答

3
+0

我編輯了您的答案,使其更清晰地向審閱隊列中的其他人[審閱它](http://stackoverflow.com/review/low-quality-posts/11760430),它不是僅鏈接答案。 – 2016-03-24 16:11:52

+0

FWIW,我認爲[在你之後回答的]雙關語(http://stackoverflow.com/a/2734209/1364007)在功能上相同的內容可能不保證額外的11 upvotes它得到你的。 – 2016-03-24 16:26:29

4
Public Sub DoSomething(outerFunction as Func(of T)) 
    ' do something 

    ' call passed in function 
    Dim value = outerFunction 
End Sub 
1

一些調查研究後,我想出了一個解決方案:

使用CallByName功能:

MSDN reference

這讓我有實際跑了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 

請注意,你需要有進口Microsoft.VisualBasic程序。 CallType在您正在處理的模塊/類中。

相關問題