Как исправить AddressOf требует непринужденной беседы с ошибкой делегата

Извините, это смесь C# и VB.Net

У меня есть класс C# с 2 делегатами:

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 требуют упрощенного диалога с типом 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 делегата / события / методы выглядят достаточно похожими, поэтому я не знаю, почему один в порядке, а другой выдает предупреждение.

2 ответа

Решение

Наверное твой GetSetting функция должна полностью соответствовать GetSettingDelegate подпись:

Private Function GetSetting(ByVal key As String) as String

Ваш код 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
Другие вопросы по тегам