2010-04-29 12 views
5

निष्पादित करता है क्या कोई उप/फ़ंक्शन बनाने के लिए vb.net में कोई तरीका है जो कि किसी अन्य फ़ंक्शन पर किसी प्रकार का पॉइंटर तर्क देगा, और इस नए को अनुमति दें पास फ़ंक्शन निष्पादित करने के लिए उप/फ़ंक्शन?VB.NET फ़ंक्शन जो पैरामीटर के रूप में अन्य कार्यों को लेता है, और उन्हें

मेरे पास 10-12 xml-rpc फ़ंक्शन हैं जो मैं दूरस्थ सर्वर के विरुद्ध कॉल कर रहा हूं। इन कार्यों में से प्रत्येक में अलग-अलग तर्क सूचियां होती हैं (एक 1 स्ट्रिंग लेता है, दूसरा 3 तार और एक int, आदि ले सकता है)। वे सभी एक वस्तु वापस करते हैं।

जैसा कि मैं इन्हें बुला रहा हूं, ऐसा लगता है कि इसे बेहतर तरीके से बेहतर बनाया जा सकता है। उदाहरण के लिए, हर मैं इन कार्यों में से किसी भी फोन, मैं एक सत्र बूंद के लिए वापसी मान का परीक्षण करना चाहते हैं, और कोशिश करते हैं और दूरस्थ प्रणाली से पुन: कनेक्ट करने के लिए कुछ, आदि

कर .net का उपयोग करते हुए 3.5

धन्यवाद !

आर

उत्तर

3

उपयोग Func<in T, out TResult>

+0

मैंने समीक्षा के कतार में अन्य लोगों के लिए इसे स्पष्ट करने के लिए अपना उत्तर संपादित किया [http://stackoverflow.com/review/low-quality-posts/11760430) कि यह एक लिंक-केवल उत्तर नहीं है। –

+0

एफडब्ल्यूआईडब्ल्यू, मुझे लगता है कि [आपके उत्तर के बाद आया जवाब] [http://stackoverflow.com/a/2734209/1364007) जो कार्यात्मक रूप से एक ही सामग्री है, शायद यह अतिरिक्त 11 अपवॉट्स पर वारंट नहीं करता है आपका अपना। –

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

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

के लिए कुछ और अनुसंधान के बाद की जरूरत है, मैं एक समाधान के साथ आया था:

कॉलबिननाम फ़ंक्शन का उपयोग करना:

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 की आवश्यकता है। मॉड्यूल/कक्षा में कॉलटाइप आप काम कर रहे हैं।