文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

VB.NET WithEvents怎么用

2023-06-17 20:25

关注

小编给大家分享一下VB.NET WithEvents怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

VB.NET经过长时间的发展,很多用户都很了解VB.NET WithEvents了,这里我发表一下个人理解,和大家讨论讨论。VB除了可以用C#那样的方法来处理事件响应以外,还有从VB5继承下来的独特的事件处理方式——VB.NET WithEvents。

我喜欢称这种事件处理方式为静态的事件处理,书写响应事件的方法时就已经决定该方法响应的是哪一个事件,而C#则是在代码中绑定事件的。比如下面这个最简单的例子:

Public Class HandlerClass  Public WithEvents MyObj As EventClass   Private Sub MyObj_MyEvent(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyObj.MyEvent  MsgBox("hello")  End Sub   Public Sub New()  MyObj = New EventClass  End Sub  End Class

代码中用到的EventClass是这样的:

Public Class EventClass  Public Event MyEvent As EventHandler   Protected Overridable Sub OnMyEvent(ByVal e As EventArgs)  RaiseEvent MyEvent(Me, e)  End Sub   Public Sub Test()  OnMyEvent(New EventArgs)  End Sub  End Class

我们来复习一下,这段代码隐式地给EventClass编写了两个方法——Add_MyEvent(EventHandler)和 Remove_MyEvent(EventHandler),实际上任何使用事件的上下文都是通过调用这两个方法来绑定事件和解除绑定的。C#还允许你书写自己的事件绑定/解除绑定的代码。

那么WithEvents是怎么工作的呢?VB.net的编译器在编译时自动将

Public WithEvents MyObj As EventClass

翻译成下面这个过程:

Private _MyObj As EventClass   Public Property MyObj() As EventClass  Get  Return _MyObj  End Get  Set(ByVal Value As EventClass)   If Not (Me._MyObj Is Nothing) Then  RemoveHandler _MyObj.MyEvent, AddressOf MyObj_MyEvent  End If   Me._MyObj = Value  If Me._MyObj Is Nothing Then Exit Property   AddHandler _MyObj.MyEvent, AddressOf MyObj_MyEvent   End Set  End Property

由此可见,当对VB.NET WithEvents变量赋值的时候,会自动触发这个属性以绑定事件。我们所用的大部分事件响应都是1对1的,即一个过程响应一个事件,所以这种VB.NET WithEvents静态方法是非常有用的,它可以显著增强代码可读性,同时也让VB.net中的事件处理非常方便,不像C#那样离开了窗体设计器就必须手工绑定事件。

不过在分析这段IL的时候,我也发现了VB.net在翻译时小小的问题,就是ldarg.0出现得过多,这是频繁使用Me或this的表现,所以我们在编码过程中一定要注意,除了使用到Me/this本身引用以外,使用它的成员时不要带上Me/this,比如Me.MyInt = 1就改成MyInt = 1,这样的小习惯会为你带来很大的性能收益。

看完了这篇文章,相信你对“VB.NET WithEvents怎么用”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯