我问自己
之间存在什么差异Dim WithEvents EClass As New EventClass
和
AddHandler Obj.XEvent, AddressOf Me.XEventHandler
您应该在哪种情况下使用第一个或第二个?
任何人都可以解释一下吗?感谢。
答案 0 :(得分:2)
WithEvents支持Handles
关键字。您可以将其应用于某个方法。当VB.NET编译器遇到它时,它将在自动调用AddHandler的类的构造函数中生成代码。所以你不必自己写。
设计人员非常方便,WPF和Winforms设计师都依赖它。它消除了在删除事件处理程序时出现构建错误的可能性,您也可以忘记删除AddHandler语句。它与以前版本的Visual Basic中编写的代码(如VB6)非常兼容。这使得转换旧项目变得更容易。可能是WithEvents在.NET中实现的主要原因,C#没有类似的东西。
还有一个很好的理由不喜欢它。它有一个令人讨厌的问题,至今仍未解决。为了支持编辑和继续,编译器在Debug构建中创建WeakReferences。调试器确保再次清除那些WeakReference对象。没有调试器运行时不会发生这种情况。这是一个泄漏,最终会导致程序崩溃,尽管需要一段时间。这使得非常非常重要,您只需要部署VB.NET程序的Release版本。