日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
詳細分析VB.NETWithEvents

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

兩當網(wǎng)站建設公司創(chuàng)新互聯(lián),兩當網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為兩當上千余家提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務好的兩當做網(wǎng)站的公司定做!

我喜歡稱這種事件處理方式為靜態(tài)的事件處理,書寫響應事件的方法時就已經(jīng)決定該方法響應的是哪一個事件,而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),實際上任何使用事件的上下文都是通過調(diào)用這兩個方法來綁定事件和解除綁定的。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變量賦值的時候,會自動觸發(fā)這個屬性以綁定事件。我們所用的大部分事件響應都是1對1的,即一個過程響應一個事件,所以這種VB.NET WithEvents靜態(tài)方法是非常有用的,它可以顯著增強代碼可讀性,同時也讓VB.net中的事件處理非常方便,不像C#那樣離開了窗體設計器就必須手工綁定事件。

不過在分析這段IL的時候,我也發(fā)現(xiàn)了VB.net在翻譯時小小的問題,就是ldarg.0出現(xiàn)得過多,這是頻繁使用Me或this的表現(xiàn),所以我們在編碼過程中一定要注意,除了使用到Me/this本身引用以外,使用它的成員時不要帶上Me/this,比如Me.MyInt = 1就改成MyInt = 1,這樣的小習慣會為你帶來很大的性能收益。


分享題目:詳細分析VB.NETWithEvents
文章轉載:http://m.5511xx.com/article/dppgecd.html