程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
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之旅(十四)—靜態關聯事情與處置順序正文


“要解釋新的事情處置順序的辦法,我們需求先說幾個重要的問題。 ”大李開端嚴肅起來,我也只得移動一下身子,表現出正襟危坐的架勢。

“我們首先討論一下事情是怎樣發生的。事情是對象發送的音訊, 以發信號告訴操作的發作。操作能夠是由用戶交互,例如鼠標單擊惹起的,也可 能是由某些其他的順序邏輯觸發的。引發事情的對象叫做事情發送方(啊,聽到 這,henry忽然明白了事情處置順序中的第一個參量為什麼叫sender了,就是指事 件發送的那個對象呀)。捕捉事情並對其作出呼應的對象叫做事情接納方。在事 件通訊中,事情發送方類不知道哪個對象或辦法將接納到它引發的事情。所需求 的是在源和接納方之間存在一個媒介,或相似指針的機制。.net 框架定義了一個 特殊的類型delegate,也就是委托,該類型提供函數指針的功用。 ”

“啊,我早就聽說過委托的,就是不知道它是什麼意思咧! ”我做出期盼狀。

“委托就是可用於調用其他對象辦法的對象 。與其他的類不同,委托類具有一個簽名,並且它只能對與其簽名婚配的辦法進 行援用。”大李持續說著。

““噢,委托也就是一個函 數指針喽。”我好象了解了一點。

“差不多,委托可以等效於 一個類型平安函數指針或一個回調。但不同於函數指針,visual basic.net 委托 是基於 system.delegate 類的援用類型,它可以援用我們先前說過的共享辦法( 詳見《共享成員》一篇)和實例辦法。”

“明白了一點。 ”我一邊搖頭一邊說,“我們想要靜態調用事情處置順序,是不是就 要應用委托來聲明是哪個順序用於處置事情呀?”

大李驚異地看著 我,顯露了幾分贊許。

“委托是.net中的一個重要的類型,我們以 後還需求詳細討論。如今我們需求關注的就是如何來經過操作委托來完成將事情 與事情處置順序靜態聯絡起來。”大李接著就開端修正代碼:

module module1
public class chenry
        public event eventhr()    ´ 聲明一個事情
        sub causesomeevent()
            raiseevent eventhr()   ´ 引發事情
        end sub
    end class
 
    dim obj as new chenry()
    sub obj_eventhr()  ´在handles之後聲明事情
        msgbox("事情處置器捕獲到了事情.")   ´處置事情.
    end sub
    sub main()
        addhandler obj.eventhr, addressof obj_eventhr
        obj.causesomeevent()   ´調用對象去引發事情
end sub
end module

“看到有什麼不同嗎?”大李轉過身來問我。

“次要有兩個不同,首先是obj的定義不再用withevents來標識了, 因而事情處置順序obj_eventhr()也就不能經過handles關鍵字來聲明事情,也就 是說eventhr事情與事情處置順序沒有用withevent-handles停止關聯;其次,是 運用了addhandle和 addressof……”說到這,我也沒有詞了 ,只能語焉不詳。

“呵呵,我來幫你接著說。”大李拍了拍我 的肩膀,接著說“先說addressof吧,addressof 運算符創立的是一個指向 指定的進程的進程委托。我們方才說過委托相當於一個函數指針,那麼addressof 就是委托的操作符,經過它能失掉委托的援用。”

見到我稍稍明白 了,大李又接著說:“光看addhandle可以將obj.eventhr事情與 obj_eventhr事情處置順序關聯起來的作法,你一定不理解我所說的靜態關聯益處 在哪裡。由於我沒提到另一個辦法removehandler。它的運用辦法和addhandle是 一樣的,比方:

removehandler obj.eventhr, addressof obj_eventhr

你看,addhandler 與 removehandler 在一同就可以提供比 handles 子句更大的靈敏性,只需我們擅長應用它們,就可以靜態地添加、移除 和更改與某事情關聯的事情處置順序。而且比 handles 要弱小的是,addhandler 允許將多個事情處置順序與單個事情停止關聯。”

大李停了一停, 接著說:“你要留意的一點就是addressof前面跟著的委托簽名應該與相應 的事情數據類相分歧,我們看一個例子。”

addhandler 

textbox.mousedown,addressof textboxmousedownhandler
‘錯誤的示例1:
private sub textboxmousedownhandler( )
end sub
‘錯誤的示例2
private sub textboxmousedownhandler(byval sender as object, byval e as 

eventargs)
end sub
‘正確的示例:
private sub textboxmousedownhandler(byval sender as object, byval e as 

mouseeventargs)
end sub

“事情是一個文本框中的鼠標按下事情,我們不必自帶的 規范關聯事情處置辦法,而用addhandler來完成,那麼addressof之後相應的辦法 的參數聲明,應該與mousedown事情對應的事情的委托mouseeventhandler具有相 同的簽名,也就是參數聲明上要堅持分歧,一個object變量,一個 system.windows.forms.mouseeventargs變量。”

我到這一步才算明 白了個大約,事情處置順序可以經過addhandler和removehandler辦法在我們需求 的時分靜態地樹立或斷開事情與事情處置順序的關聯關系。可是,關於大李剛說 的“事情的委托mouseeventhandler”,我還是不太了解。

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