new 個物件名字叫做 wtf, 然後寫個方法叫做 methodByMe
把這個方法給 wtf 掛上去
wtf.wtf_delegate += methodByMe
ok, 這樣就寫完了, 只要 wtf裡面有地方使用到 wtf_delegate,
就會去使用我寫的 methodByMe
那 wtf_delegate是怎麼來的, 答案是 wtf這個類別裡面定義好的
它裡面大概是這樣寫
..... (程式碼開頭)
..... (中間省略)
public sthDelegateAnnounce wtf_delegate;
..... (中間省略)
(在 wtf的某個地方,比如說按鈕按下去)
wtf_delegate();
.....
而且在這裡
wtf_delegate沒有定義實作方法, 那麼實作由誰去做呢??
............
厄, 剛剛不是寫了嗎 寫個方法叫做 methodByMe掛上去
那麼 sthDelegateAnnounce 是哪裡來的,
顆顆, 你可以宣告在專案任一個 class裡面
是這樣寫
public delegate sthDelegateAnnounce ( 有想要傳參數寫參數 )
Example:
假設我們現在有兩個 Form, 分別叫做 Form1跟 Form2
程式運作的時候會先開啟 Form1, 然後Form1上面有個按鈕,
按下去之後會啟動 Form2, 接著 點選Form2上面的某些選項
Form1就會接收到Form2上面
架構:
類別A(專門用來宣告Delegate)
就像是註冊一樣, 跟某個找的到這個資訊的人說這裡有ooxx的東西
類別myPic (一個Form 讓你選擇圖片)
類別Form1 (普通的WinForm, 目標是接收 myPic 丟回來的資訊show出圖片來)
實際做法:
A裡面宣告個delegate
public delegate void transPic(Image ii);
Form1 裡面 new 個 myPic 叫做 mp
在 Form1裡面 寫個 Method, 例:
public void getPic(image ii){//imgGet 可以事先宣告在 Form1裡面, 也可以在 getPic裡面宣告
imgGet = ii;
}
// 不過宣告在getPic裡面這物件不就只能活在getPic裡面, 一旦getPic這方法結束了
//imgGet不就死了
然後 把 getPic這個方法指定給 mp
mp.selectPic += getPic
然後
myPic類別裡面這樣寫
//宣告在A類別裡面定義好的 delegate
public transPic selectPic;
//在 myPic裡面會做的某個動作, 如說按下Button
Image img1 = ooxxxoo;
public void button1_Click(object sender, EventArgs e)
{
selectPic(img1);
//從這裡看來 img1自然就是可以從 myPic裡面拿到(或看見)的 圖片資源了
}
完成的原始碼
https://drive.google.com/#folders/0B0VyUtjJfcy9SVpZUjR2a1BSUVk
0 件のコメント:
コメントを投稿