6

申し訳ありませんが、これは C# と VB.Net の混合です。

私は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 クラスでは、イベントにハンドラーを追加します。

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

ハンドラーを削除しようとすると:

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

SetSetting は問題ありませんが、GetSetting は警告をスローします。

このコンテキストでは、AddressOf 式は効果がありません。これは、AddressOf へのメソッド引数が、イベントのデリゲート型との会話を緩和する必要があるためです。

ここに方法があります

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 つのデリゲート/イベント/メソッドはよく似ているため、一方が問題なく、一方が警告をスローする理由がわかりません。

4

2 に答える 2

15

おそらく、関数は署名GetSettingと完全に一致する必要があります。GetSettingDelegate

Private Function GetSetting(ByVal key As String) as String
于 2011-05-23T23:04:39.027 に答える
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
于 2011-05-23T23:06:15.037 に答える