2011-05-23 34 views
6

對不起,這是C#的混合和VB.Net如何解決AddressOf需要一個輕鬆的談話給委託錯誤

我有2個代表一個C#類:

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

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

在VB I類添加處理程序的事件:

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(),如上定義,將返回Object,而不是String。我認爲馬克斯是對的。 – rskar 2011-05-23 23:08:02

+3

使用Option Strict On讓編譯器捕獲這些錯誤。 – 2011-05-23 23:11:01

回答

14

可能是你GetSetting函數必須完全匹配GetSettingDelegate簽名:

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

謝謝。現在明顯!當你第一次回答時,我將你標記爲答案。 – 2011-05-23 23:23:36

6

您的VB代碼:

Private Function GetSetting(ByVal key As String) 

不匹配,C#委託定義:

public delegate string GetSettingDelegate(string key); 

你應該在VB實現中指定返回類型,如下所示:

Private Function GetSetting(ByVal key As String) As String