程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB.NET >> VB.NET之旅(十五)—靜態事情處置辦法

VB.NET之旅(十五)—靜態事情處置辦法

編輯:VB.NET

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的寬廣天空的大門,持續努力, 我還得加油呀!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved