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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修复AddressOf需要轻松的对话委托错误相关的知识,希望对你有一定的参考价值。

对不起,这是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函数必须完全匹配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

以上是关于如何修复AddressOf需要轻松的对话委托错误的主要内容,如果未能解决你的问题,请参考以下文章

错误:没有为类 'Utf8' 定义 getter 'addressOf'

如何修复 laravel 5.2 zizaco 委托:迁移类名验证?

如何修复在python中选择文件后不断重新打开的文件对话框

如何修复/调试 scikit learn 中引发的这个多进程终止工作错误

如何禁止Microsoft Edge自定义协议对话框警告?

C++11的std::addressof源码解析