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