Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.Net中的WithEvents vs AddHandler_Vb.net_Events_Addhandler - Fatal编程技术网

VB.Net中的WithEvents vs AddHandler

VB.Net中的WithEvents vs AddHandler,vb.net,events,addhandler,Vb.net,Events,Addhandler,我问自己这两者之间有什么区别 Dim WithEvents电子课堂作为新的EventClass 及 AddHandler Obj.XEvent,地址Me.XEventHandler 在哪种情况下你应该使用第一种还是第二种 有人能解释一下吗?谢谢。WithEvents支持句柄关键字。您可以将其应用于方法。当VB.NET编译器遇到它时,它将在自动调用AddHandler的类的构造函数中生成代码。所以你不必自己写 它对设计人员来说非常方便,例如WPF和Winforms设计人员都依赖它。它消除了删除

我问自己这两者之间有什么区别

Dim WithEvents电子课堂作为新的EventClass

AddHandler Obj.XEvent,地址Me.XEventHandler
在哪种情况下你应该使用第一种还是第二种


有人能解释一下吗?谢谢。

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

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


还有一个很好的理由让我们不喜欢它。它有一个棘手的问题,至今仍未解决。为了支持编辑并继续,编译器在调试生成中创建weakreference。调试器确保再次清理这些WeakReference对象。在没有调试器的情况下运行时不会发生这种情况。这是一个漏洞,最终会使你的程序崩溃,尽管这需要一段时间。这使得只部署VB.NET程序的发布版本变得非常重要。

第一个是声明一个能够引发事件的对象变量。第二个实际上是为一个事件附加一个事件处理程序。如果您执行第一个操作是因为它不是UI对象,那么您还需要第二个。实际上,在VB中,第一条语句将允许IDE在2个编辑器下拉列表中公开所有EventClass事件。第二种方法允许您将事件连接到键入的方法,而不是让IDE从对象事件下拉列表中创建。