【问题标题】:Convert event declaration from C# to Visual Basic 2010将事件声明从 C# 转换为 Visual Basic 2010
【发布时间】:2015-02-06 18:42:56
【问题描述】:

我目前正在将一个类从 C# 转换为 Visual Basic 2010。

在我来到 EventHandlers 之前,大部分部分都运行良好。我自己或使用转换器都无法将以下代码行转换为 Visual Basic:

public event EventHandler<StringEventArgs> ServerMessage = delegate { };

转换器的代码只给我错误“预期语句结束”:

Public Event ServerMessage As EventHandler(Of StringEventArgs) = Sub() 

End Sub

那么,delegate { } 部分是否需要翻译成 Visual Basic 代码?

如果可以,如何正确转换?

如果没有,仅使用以下内容是否足够:

Public Event ServerMessage As EventHandler(Of StringEventArgs)

?

【问题讨论】:

  • EventHandler(Of UserJoinedEventArgs) 应该是 EventHandler(Of StringEventArgs)(基于您的原始代码)。
  • @BradChristie:哎呀,你是对的。复制了错误的代码行。 :)
  • 你为什么要把 C# 转换成 VB?
  • 因为我想在我自己的项目中使用该类并且能够更快地修改它,因为我对 VB 的了解比 C# 多。我之前也看到@Servy 删除了 C# 标签,我又添加了它,因为我以为我自己不小心删除了它。 (:

标签: vb.net visual-studio-2010 c#-to-vb.net


【解决方案1】:

VB.NET 的 RaiseEvent 在实际引发事件之前检查事件是否没有订阅者(它不会抛出异常),所以你的

Public Event ServerMessage As EventHandler(Of StringEventArgs)

应该可以。

这就是在 C# 中将委托设置为等于 delegate{ }; 的目的——以避免在引发事件时检查 nulls。由于事件总是有一个空方法分配给它,所以它不会抛出异常。

见:https://stackoverflow.com/a/16712799/864414

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多