[Develop]委派(Delegate)

[Develop]委派(Delegate)

[Develop] Visual Studio – Delegate

這篇研究是一篇圖少字多的研究,這次要討論一下在 Visual Studio 中開發的幾個我個人覺得覺得比較有趣的概念.首先就來討論委派(delegate)
這個觀念.[delegate]這個字原意為 [代理],在Visual Studio開發中是常常被運用到的概念.接下來我們舉一個生活實例來說明這個概念.我最喜歡舉例的
[披薩店與訂Pizza]例子又出現了~壓呼!!!

首先假設我們要去訂Pizza ,我們就是一個客戶類別,而Pizza店也是一個類別,當我們訂了Pizza後,我們會告訴服務人員,[Pizza好了請通知我,我再去拿],這
句話就已經出現了委派(delegate)概念了. 當Pizza烤好了,服務人員會電話通知我們可以前往去拿了,而實際上靠腿走路走到Pizza店去拿Pizza的是我們顧客本人
(也就是我們這個顧客類別)而不是Pizza的服務人員(腳因該是長在你身上吧???) 所以實際執行類別方法的是顧客,但是真正驅使顧客前進的是店員,也就是當店員
打電話給我們時,我們才知道要去拿Pizza.所以我們(顧客類別)將我們前往Pizza店拿Pizza的行為(顧客類別.去拿Pizza的方法)交由店員(店員類別)來驅動(Invoke).
說了這麼多,我們用一個範例來說明吧!

我們在VS2008里面新增一個Windows Form的專案,然後在預設的[ Form1 ]上面拉出一個
[button]按鍵.,.

clip_image001

接著我們在新增一個類別,這個類別名稱我們叫它[ Customer ],就是準備要訂Pizza的顧客了阿.

clip_image002

在這個類別裡面我們定義一個方法叫做 [ Callme ] ,這個方法有一個字串傳入值,用意是讓顧客知道是誰Call我.呼叫了這個方法後,你想像裡面是使用者開始起身走路去拿Pizza的程式.

clip_image003

接著我們回到 [ Form1 ]去,點兩下,進入 [ Form1 ]程式編輯視窗中.我們首先宣告一個委派,這邊你可以想像成,我要告訴Pizza店員怎麼呼叫我的行為.例如不一定是每個客戶都是打手機呼叫,有些客戶是 走到門口大喊就可以了,至於這個客戶要怎麼被通知,就看這客戶(類別)提供甚麼方法讓你來呼叫他,例如傳簡訊,打電話,寄E-mail…等等.所以我們要宣告委派來指向類別的方法,因此必須跟你將要被委派的方法有一樣的輸入值與輸出值.

我們在[button_click]事件裡撰寫三行程式,首先我們New一個Customer物件實體出來,也就是做出一個客人,然後把叫我這個客人來拿Pizza的方法委派給店員來
驅動.最後就是店員執行呼叫通知顧客來拿Pizza.

clip_image004

我們來測試一下剛剛撰寫的程式,按下Visual Studio執行的按鈕,跳出了我們剛剛所設計的Form表單,按下中間的
[ Button ]按鈕後,會跳出我們在 [ Customer ]類別中所設計的程式,也就是說實際上值行程式的是顧客實體( Instance
)而非店員實體( Instance ) .

clip_image001[1]

clip_image005clip_image006