Как исправить 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