對.Net事件委托的深入分析
2006/12/22 9:41:46
  軟件的對象方法其實是對現實世界的模擬,你可能會想現實世界里的委托哪有這么多呢?這么重要呢?
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  
 
 
 
 
    從這個意義上理解委托機制的重要性我想應該是足夠了。委托機制是促使事件發送與事件接受的一種對接策略,對象對周圍信號的反應或在一定環境中所具備的對其它對象的通知行為的響應則被描述成所謂的“事件”,這可以類比人對周圍世界反饋產生信號的能力。

  委托就是一種定向信號流:指定產生、接受信號者并產生信號反饋的技術。

  我可愛的小女兒才剛剛學會說話就在飯桌上支使她可憐的“老”爸:爸爸,把我的小勺子拿來。我接到“信號”立即屁顛屁顛地跑到廚房拿到勺子送到女兒的小手上,一個“委托”完成的非常漂亮,而女兒則無須知道我在什么地方、如何拿到勺子,她只管接受到我給她專門買的小勺子就行,否則,她就要仰著小臉“哇哇”大哭了。

  先說說事件委托的基礎。

  為了說明問題我設計了一個窗體還有幾個按鈕的示例DelegateDemo1項目,以便可以直觀感受委托的基本用法。

  至于委托在.Net中的實現,編譯器會自動生成一個完整的類定義:一個構造器,Invoke,BeginInvoke,以及EndInvoke。

  C#2003中隱式使用Invoke(其顯式調用會報錯)會讓我們誤解有一個以委托名稱為名稱的函數,其實沒有,它只是隱式使用Invoke方法。而VB.net包括最新的VB.net2005均可以采取兩種方法(顯式或隱式)使用Invoke方法。我比較喜歡顯式使用它,因為這樣比較貼近事物的本質。

  回到示例,代碼如下(使用VB.net2003并出去VS自動生成的代碼):

    1 Public Class Form1Class Form1
2
3 Inherits System.Windows.Forms.Form
4
5 Private Sub Button1_Click()Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button4.Click
6
7 Select Case CType(sender, Button).Name
8
9 Case "Button1"
10
11 MessageBox.Show("你點擊了Button1!", "委托提示", MessageBoxButtons.OK)
12
13 Case "Button2"
14
15 MessageBox.Show("你點擊了Button2!", "委托提示", MessageBoxButtons.OK)
16
17 Case "Button3"
18
19 MessageBox.Show("你點擊了Button3!", "委托提示", MessageBoxButtons.OK)
20
21 Case "Button4"
22
23 MessageBox.Show("你點擊了Button4!", "委托提示", MessageBoxButtons.OK)
24
25 End Select
26
27 End Sub
28
29 Private Sub Button2_Click()Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
30
31 MessageBox.Show("Button2的Click事件,注意執行順序!", "委托提示", MessageBoxButtons.OK)
32
33 End Sub
34
35 Private Sub Button3_Click()Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
36
37 Dim Demohandler1 As DemoHandler
38
39 Demohandler1 = AddressOf Button1_Click
40
41 Demohandler1.Invoke(sender, e)
42
43 Dim Demohandler2 As DemoHandler
44
45 Demohandler2 = AddressOf Button2_Click
46
47 Demohandler2(sender, e)
48
49
50
51 End Sub
52
53 Private Sub Button4_Click()Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
54
55 End Sub
56
57 Private Sub Button5_Click()Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
58
59 End Sub
60
61 Private Sub Form1_DoubleClick()Sub Form

下一頁
返回列表
返回首頁 主站蜘蛛池模板: free性泰国女人hd| 亚洲免费观看视频| 美国艳星janacova| 国产成人年无码AV片在线观看| 99热都是精品久久久久久| 我们离婚了第二季韩国综艺在线观看 | 久久久无码中文字幕久...| 欧美亚洲国产片在线观看| 亚洲色成人www永久网站| 精品视频一区二区三区在线播放 | 99视频精品全部在线观看| 成人毛片18女人毛片免费| 久久成人午夜电影mp4| 欧美a级v片在线观看一区| 亚洲欧美日韩国产vr在线观| 看一级特黄a大一片| 啦啦啦www免费视频| 青娱乐精品在线| 国产成人无码网站| 亚洲综合久久一本伊伊区| 国产香港特级一级毛片| eeuss影院在线观看| 小莹与翁回乡下欢爱姿势| 中文字幕乳授乳奶水电影小说| 日本理论片午夜论片| 亚州免费一级毛片| 欧美一级日韩一级| 亚洲国产精品无码久久青草| 正能量www正能量免费网站| 人妻体体内射精一区二区| 精品中文字幕一区二区三区四区 | 成年免费视频黄网站在线观看| 久久久久性色av毛片特级| 日韩免费毛片视频| 久久综合综合久久综合| 杨贵妃艳史毛片在线播放免费观看| 亚洲国产欧美91| 欧美性xxxxx极品老少| 亚洲欧美一区二区三区| 毛片在线免费视频| 亚洲精品乱码久久久久久下载 |