如何修复AddressOf需要轻松的对话委托错误

Ste*_*rne 6 c# vb.net delegates address-operator

对不起,这是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;
Run Code Online (Sandbox Code Playgroud)

在VB类中,我为事件添加了处理程序:

AddHandler _gisCtrl.SetSettingEvent, AddressOf SetSetting
AddHandler _gisCtrl.GetSettingEvent, AddressOf GetSetting
Run Code Online (Sandbox Code Playgroud)

当我尝试删除处理程序时:

RemoveHandler _gisCtrl.SetSettingEvent, AddressOf SetSetting
RemoveHandler _gisCtrl.GetSettingEvent, AddressOf GetSetting
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决这个问题以及为什么它首先被抛出?2个委托/事件/方法看起来很相似,我不知道为什么一个是好的,一个人发出警告.

max*_*max 15

可能你的GetSetting功能必须完全匹配GetSettingDelegate签名:

Private Function GetSetting(ByVal key As String) as String
Run Code Online (Sandbox Code Playgroud)


Jef*_*sen 6

你的vb代码:

Private Function GetSetting(ByVal key As String)
Run Code Online (Sandbox Code Playgroud)

与C#委托定义不匹配:

public delegate string GetSettingDelegate(string key);
Run Code Online (Sandbox Code Playgroud)

你应该在VB实现中指定一个返回类型,如下所示:

Private Function GetSetting(ByVal key As String) As String
Run Code Online (Sandbox Code Playgroud)