2011-05-23 9 views
6

क्षमा आवश्यकता है, यह सी # का एक मिश्रण है और VB.Netकैसे AddressOf ठीक प्रतिनिधि त्रुटि के एक आराम बातचीत

2 प्रतिनिधियों के साथ साथ एक सी # वर्ग है:

public delegate string GetSettingDelegate(string key); 
public event GetSettingDelegate GetSettingEvent; 

public delegate void SetSettingDelegate(string key, string value); 
public event SetSettingDelegate SetSettingEvent; 

एक वीबी में वर्ग मैं इस घटना के लिए संचालकों जोड़ें:

AddHandler _gisCtrl.SetSettingEvent, AddressOf SetSetting 
AddHandler _gisCtrl.GetSettingEvent, AddressOf GetSetting 

जब मैं कोशिश करते हैं और हटाने संचालकों:

RemoveHandler _gisCtrl.SetSettingEvent, AddressOf SetSetting 
RemoveHandler _gisCtrl.GetSettingEvent, AddressOf GetSetting 

SetSetting ठीक है लेकिन GetSetting एक चेतावनी फेंकता है:

AddressOf अभिव्यक्ति इस संदर्भ में कोई प्रभाव नहीं है क्योंकि AddressOf को विधि तर्क घटना के delagate प्रकार के एक आराम बातचीत की आवश्यकता है।

यहाँ तरीकों

Private Sub SetSetting(ByVal key As String, ByVal value As String) 
    KernMobileBusinessLayer.[Global].Settings.SetValue(key, value) 
End Sub 

Private Function GetSetting(ByVal key As String) 
    Return KernMobileBusinessLayer.[Global].Settings.GetString(key) 
End Function 

किसी भी विचार है कि यह कैसे तय करने के लिए कर रहे हैं और क्यों यह पहली जगह में फेंक दिया जाता है? 2 प्रतिनिधि/घटनाएं/विधियां इतनी अच्छी लगती हैं कि मुझे नहीं पता कि कोई ठीक क्यों है और कोई चेतावनी फेंकता है।

+0

ऊपर परिभाषित अनुसार GetSetting(), वस्तु को वापस नहीं करेगा, स्ट्रिंग नहीं। मुझे लगता है कि अधिकतम सही है। – rskar

+3

कंपाइलर को इस तरह की गलतियों को पकड़ने के लिए विकल्प सख्त ऑन का उपयोग करें। –

उत्तर

14

शायद अपनी GetSetting समारोह पूरी तरह से GetSettingDelegate हस्ताक्षर से मेल खाना चाहिए:

Private Function GetSetting(ByVal key As String) as String 
+0

धन्यवाद। अब स्पष्ट! जैसा कि आपने पहले उत्तर दिया था, मैंने आपके उत्तर के रूप में चिह्नित किया। –

6

अपने VB कोड:

Private Function GetSetting(ByVal key As String) 

सी # प्रतिनिधि परिभाषा से मेल नहीं खाता:

public delegate string GetSettingDelegate(string key); 

आपको चाहिए अपने वीबी कार्यान्वयन में एक रिटर्न प्रकार निर्दिष्ट करें, इस तरह:

Private Function GetSetting(ByVal key As String) As String