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 的方法参数需要与事件的 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 个代表/事件/方法看起来很相似,我不知道为什么一个可以,一个会发出警告。

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 回答