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

问题描述 投票:6回答:2

对不起,这是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的方法参数需要与事件的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个委托/事件/方法看起来很相似,我不知道为什么一个是好的,一个人发出警告。

c# vb.net delegates address-operator
2个回答
15
投票

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

Private Function GetSetting(ByVal key As String) as String

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
© www.soinside.com 2019 - 2024. All rights reserved.