成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳細分析VB.NET WithEvents

開發 后端
這里介紹當對VB.NET WithEvents變量賦值的時候,會自動觸發這個屬性以綁定事件。我們所用的大部分事件響應都是1對1的,即一個過程響應一個事件,所以這種VB.NET WithEvents靜態方法是非常有用的。

VB.NET經過長時間的發展,很多用戶都很了解VB.NET WithEvents了,這里我發表一下個人理解,和大家討論討論。VB除了可以用C#那樣的方法來處理事件響應以外,還有從VB5繼承下來的獨特的事件處理方式——VB.NET WithEvents。

我喜歡稱這種事件處理方式為靜態的事件處理,書寫響應事件的方法時就已經決定該方法響應的是哪一個事件,而C#則是在代碼中綁定事件的。比如下面這個最簡單的例子:

  1. Public Class HandlerClass  
  2. Public WithEvents MyObj As EventClass  
  3.  
  4. Private Sub MyObj_MyEvent(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyObj.MyEvent  
  5. MsgBox("hello")  
  6. End Sub  
  7.  
  8. Public Sub New()  
  9. MyObj = New EventClass  
  10. End Sub  
  11. End Class 

代碼中用到的EventClass是這樣的:

  1. Public Class EventClass  
  2. Public Event MyEvent As EventHandler  
  3.  
  4. Protected Overridable Sub OnMyEvent(ByVal e As EventArgs)  
  5. RaiseEvent MyEvent(Me, e)  
  6. End Sub  
  7.  
  8. Public Sub Test()  
  9. OnMyEvent(New EventArgs)  
  10. End Sub  
  11. End Class 

我們來復習一下,這段代碼隱式地給EventClass編寫了兩個方法——Add_MyEvent(EventHandler)和 Remove_MyEvent(EventHandler),實際上任何使用事件的上下文都是通過調用這兩個方法來綁定事件和解除綁定的。C#還允許你書寫自己的事件綁定/解除綁定的代碼。

那么WithEvents是怎么工作的呢?VB.net的編譯器在編譯時自動將

  1. Public WithEvents MyObj As EventClass 

翻譯成下面這個過程:

  1. Private _MyObj As EventClass  
  2.  
  3. Public Property MyObj() As EventClass  
  4. Get  
  5. Return _MyObj  
  6. End Get  
  7. Set(ByVal Value As EventClass)  
  8.  
  9. If Not (Me._MyObj Is Nothing) Then  
  10. RemoveHandler _MyObj.MyEvent, AddressOf MyObj_MyEvent  
  11. End If  
  12.  
  13. Me._MyObj = Value 
  14.  
  15. If Me._MyObj Is Nothing Then Exit Property  
  16.  
  17. AddHandler _MyObj.MyEvent, AddressOf MyObj_MyEvent  
  18.  
  19. End Set  
  20. 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,這樣的小習慣會為你帶來很大的性能收益。

【編輯推薦】

  1. 原理分析VB.NET開發控件
  2. 自己動手修改VB.NET支付寶接口
  3. 如何快速掌握VB.NET控件數組
  4. 描述VB.NET IDisplayer接口
  5. 事例概括VB.NET Display方法
責任編輯:佚名 來源: 51CTO.com
相關推薦

2009-10-10 15:19:43

VB.NET Web

2009-10-12 15:41:09

VB.NET動態代碼

2009-10-14 10:25:52

VB.NET讀寫文本文

2010-01-07 17:00:38

VB.NET控件數組

2009-10-10 13:52:57

VB Update方法

2010-01-06 13:50:37

.NET Framew

2009-09-25 14:23:39

2009-09-28 10:39:01

Hibernate基礎

2009-09-14 13:50:35

LINQ編程模型

2009-09-08 15:56:50

Linq使用Group

2009-11-20 13:11:44

Oracle XML數

2009-09-09 09:48:43

Linq延遲加載

2009-09-14 16:21:34

LINQ To XML

2009-06-18 14:00:51

2009-10-28 09:55:29

VB.NET MyCl

2009-12-03 17:41:40

PHP應用發展

2009-09-07 14:18:01

C#內存管理

2009-09-09 13:53:21

Linq表值函數

2009-03-24 09:17:58

驅動GSMAndroid

2021-10-25 19:52:52

IntentFilte
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久 | 久久一区精品 | 日韩快播电影 | 成人黄色电影免费 | 日韩高清一区 | 国产一区在线免费观看视频 | 久久在视频| 免费毛片网站在线观看 | 日韩欧美国产一区二区 | 日本三级全黄三级三级三级口周 | 久久综合伊人一区二区三 | 精品成人av | 色眯眯视频在线观看 | av一区二区三区四区 | 亚洲精品在线国产 | 国产日产欧产精品精品推荐蛮挑 | 九九热在线视频观看这里只有精品 | 久草视频观看 | 久久综合国产精品 | 成年人网站国产 | 91九色在线观看 | 日韩在线 | 国产精品成人一区二区 | 一区二区三区在线免费观看 | 国产资源在线观看 | 日韩高清一区二区 | 中文字幕国产一区 | 成人在线观看免费视频 | 中文字幕精品一区 | 免费在线精品视频 | 亚洲午夜av久久乱码 | 久精品久久 | 国产成人精品综合 | 亚洲高清av | 久久99视频 | 免费毛片网 | 日本一区二区高清不卡 | 久久夜视频 | 特级毛片www| 国产精品九九视频 | 久久99精品久久久久久青青日本 |