c# - 理解/翻译 C# 事件访问器代码(特别是 += 运算符)到 VB
问题描述
我有一些需要翻译成 VB 的 C# 代码。
private EventHandler something = null;
public event EventHandler Something
{
add
{ this.something += value; }
remove
{ this.something -= value; }
}
到目前为止,我已经想出了这个(我知道它缺少 RaiseEvent 位):
Private _something As EventHandler = Nothing
Public Custom Event Something As EventHandler
AddHandler(ByVal value As EventHandler)
AddHandler Me.Something, value
End AddHandler
RemoveHandler(ByVal value As EventHandler)
RemoveHandler Me.Something, value
End RemoveHandler
End Event
当内部 AddHandler 被AddHandler Me._something, value
告知该类不包含 Event 时_something
。然后我遇到了一些示例代码,这些代码似乎使用了我逐字发布的结构。
然而,这使得 VS 抱怨为事件递归调用 AddHandler。所以看来我把事件访问器代码的翻译都弄错了。
然而,EventHandler.Operator+=
在 VB 中不存在,我有点想知道为什么它会在 C# 中工作,因为该变量something
不是某种集合。我想如果我正确理解这一点,我可能会为 VB 想出一些东西。
显然,我对 .NET 中的事件情况感到相当困惑,特别是在这种情况下 C# 和 VB 概念如何相关。
解决方案
C# 允许您直接分配给委托字段(“_something”)调用列表,但 VB 不允许。VB 等价物有点冗长,使用 Delegate.Combine 和 Delegate.Remove (我也加入了 RaiseEvent 块):
Private _something As EventHandler = Nothing
Public Custom Event Something As EventHandler
AddHandler(ByVal value As EventHandler)
Me._something = DirectCast(System.Delegate.Combine(Me._something, DirectCast(value, EventHandler)), EventHandler)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
Me._something = DirectCast(System.Delegate.Remove(Me._something, DirectCast(value, EventHandler)), EventHandler)
End RemoveHandler
RaiseEvent(ByVal sender As System.Object, ByVal e As System.EventArgs)
If Me._something IsNot Nothing Then
Me._something.Invoke(sender, e)
End If
End RaiseEvent
End Event
推荐阅读
- python - 为什么在我的 IDLE 上导入 Tensorflow 会导致错误?
- javascript - 在 VSCode 中运行 Flask 项目时如何调试 javascript 文件?
- react-native - 带有 Sticky 视图的 ScrollView 位于状态栏下方
- python - Machine Learning Tools Docker Image Size Issue
- avalonia - FrameworkPropertyMetadataOptions.AffectsMeasure and FrameworkPropertyMetadataOptions.AffectsRender in Avalonia
- reactjs - React.js - understanding hooks and their rules
- html - 转发特定时间的网页
- amazon-web-services - AWS 自定义域名映射 - 缓存?
- azure - 为 Azure Functions 安装 powershell 模块不起作用
- sql-server - Linux上的pyodbc fast_executemany在插入时出现乱码