91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

VB.NET WithEvents怎么用

發布時間:2021-12-02 11:22:03 來源:億速云 閱讀:397 作者:小新 欄目:編程語言

小編給大家分享一下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怎么用”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昭觉县| 旬阳县| 临湘市| 南宁市| 莎车县| 平谷区| 金平| 梨树县| 武宁县| 沅陵县| 长丰县| 乌鲁木齐市| 当涂县| 娱乐| 西贡区| 浦县| 承德县| 普陀区| 贵溪市| 罗甸县| 新河县| 营山县| 武乡县| 天柱县| 叶城县| 永康市| 台东县| 福海县| 柘荣县| 蒙山县| 长宁县| 广汉市| 和平县| 陆丰市| 休宁县| 安宁市| 南宁市| 烟台市| 卢氏县| 平原县| 明光市|