VB.Net中的WithEvents vs AddHandler

时间:2015-06-07 11:49:42

标签: vb.net events addhandler

我问自己

之间存在什么差异
Dim WithEvents EClass As New EventClass

AddHandler Obj.XEvent, AddressOf Me.XEventHandler

您应该在哪种情况下使用第一个或第二个?

任何人都可以解释一下吗?感谢。

1 个答案:

答案 0 :(得分:2)

WithEvents支持Handles关键字。您可以将其应用于某个方法。当VB.NET编译器遇到它时,它将在自动调用AddHandler的类的构造函数中生成代码。所以你不必自己写。

设计人员非常方便,WPF和Winforms设计师都依赖它。它消除了在删除事件处理程序时出现构建错误的可能性,您也可以忘记删除AddHandler语句。它与以前版本的Visual Basic中编写的代码(如VB6)非常兼容。这使得转换旧项目变得更容易。可能是WithEvents在.NET中实现的主要原因,C#没有类似的东西。

还有一个很好的理由不喜欢它。它有一个令人讨厌的问题,至今仍未解决。为了支持编辑和继续,编译器在Debug构建中创建WeakReferences。调试器确保再次清除那些WeakReference对象。没有调试器运行时不会发生这种情况。这是一个泄漏,最终会导致程序崩溃,尽管需要一段时间。这使得非常非常重要,您只需要部署VB.NET程序的Release版本。