【问题标题】:How fix AddressOf requires a relaxed conversation to the delegate error如何修复 AddressOf 需要对委托错误进行轻松的对话
【发布时间】:2011-05-23 22:56:50
【问题描述】:

抱歉,这是 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 个委托/事件/方法看起来很相似,以至于我不知道为什么一个没问题,一个会引发警告。

【问题讨论】:

  • 如上所述,GetSetting() 将返回 Object,而不是 String。我认为 max 是对的。
  • 使用 Option Strict On 让编译器捕捉到这些错误。

标签: c# vb.net delegates address-operator


【解决方案1】:

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

Private Function GetSetting(ByVal key As String) as String

【讨论】:

  • 谢谢。现在很明显!当您首先回答时,我将您的答案标记为答案。
【解决方案2】:

你的 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

【讨论】:

    猜你喜欢
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多