VB.NET之旅(十五)—靜態事情處置辦法。本站提示廣大學習愛好者:(VB.NET之旅(十五)—靜態事情處置辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是VB.NET之旅(十五)—靜態事情處置辦法正文
“大李哥,”我難免為自己問了如此多的問題而不好意思起來, “您方才所說的事情的委托是怎樣回事呀?”
大李顯然是明白 我會提問的:“我所說過事情驅動設計中的三要素你還記得吧? ”
“當然,就是指對象、事情和事情處置順序。”我流 利地答復道。
“對象和事情處置順序我們曾經剖析過了。要想徹底 理解事情驅動順序的來龍去脈,我們必需理解事情的構成。”見到我又一次 茫然地搖頭,他就接著說,“事情功用是由三個相互聯絡的元素提供的:提 供事情數據的類、事情委托和引發事情的類。我說過,事情就是一個信號,它告 知使用順序有重要狀況要發作。那麼我們可以想象一下,事情要發作,就會含有 共同的信息,比方,事情發送源是什麼,會發作什麼樣的事情。提供事情數據的 類就是用於記載這些信息的。該類必需從 System.EventArgs 派生出,這個我們 曾經說過了;事情的委托,這其實我也說過了,就好比是指向事情接納方的一個 指針,由於指定對象的事情是共同的,所以它的委托也是事前定義好的,就比方 MouseDown事情,它對應的委托就是MouseEventHandler。我們看一下你在代碼窗 口選Label1對象的MouseDown辦法,會自動生成這段空的事情處置順序:
Friend WithEvents Label1 As System.Windows.Forms.Label Private Sub Label1_MouseDown(ByVal sender As Object, ByVal e As _ System.Windows.Forms.MouseEventArgs) Handles Label1.MouseDown End Sub
它其實就同等於:
AddHandler Label1.MouseDown, AddressOf Label1_MouseDown Private Sub Label1_MouseDown(ByVal sender As Object, ByVal e As _ System.Windows.Forms.MouseEventArgs) End Sub
隱含的意思,就是經過先前曾經聲明為全局變量的事情委托 MouseEventHandler來完成事情處置順序參數的定義。關於MouseDown事情而言, 為什麼自動加上的事情數據類參量是MouseEventArgs類的,就是委托的作用了。
第三個要素是引發事情的類。該類必需提供事情的聲明和引發事情的辦法 。其中引發事情的辦法必需命名為On加上事情名的方式,比方事情是EventHR,那 麼引發事情的辦法就一定叫OnEventHR。”
一邊說著,大李開端修正 起方才用於規范事情處置順序的代碼來:
Module Module1 '事情數據類 Public Class HenryEventArgs Inherits EventArgs End Class '聲明委托 Public Delegate Sub HenryEventHandler(ByVal sender As Object, _ ByVal e As HenryEventArgs) Public Class CHenry ' 聲明一個事情 Public Event EventHR As HenryEventHandler Protected Overridable Sub OnEventHR(ByVal e As HenryEventArgs) '調用委托 RaiseEvent EventHR(Me, e) End Sub Public Sub start() Dim e As HenryEventArgs OnEventHR(e) End Sub End Class Dim obj As New CHenry() Sub obj_EventHR(ByVal sender As Object, ByVal e As HenryEventArgs) MsgBox("事情處置器捕獲到了事情.") '處置事情. End Sub Sub Main() AddHandler obj.EventHR, AddressOf obj_EventHR obj.start() End Sub End Module
大李指著寫好的代碼對我說:“你看,這段代碼與先前的不同之 處有不少。首先EventHR事情我定義為一個委托類型,不再是光禿禿的一個事情了 。這樣的話,EventHR事情就具有了承載事情信息的才能,事情發送源是Sender; 事情數據是HenryEventArgs類的對象。其他的你應該都能很快就明白了,對吧? ”
“嗯,還有一個問題,為什麼引發事情的辦法OnEventHR要 用維護的辦法呢?”我還是有些不解。
“這個問題問得好! ”大李點了搖頭,“這是為了讓派生類必需一直調用基類的OnEventHR 辦法以確保注冊的委托接納到事情。你只需試一下,承繼CHenry失掉一個派生類 停止事情處置,就會明白了。”
哦,一個事情驅動順序設計辦法的 講述確實讓我大開眼界,翻開了一扇理解VB.NET的寬廣天空的大門,持續努力, 我還得加油呀!