作者godman362 (青)
看板NUU_CSIE
標題[心得] delegate & Event (3)
時間Sun May 10 10:23:33 2009
上面一篇,應該要把
delegate全部講完才對
不過打完送出之後,才發現我又少打了一些東西
於是在這邊再次補齊:
前面提到
delegate的
Multicast
就是可以
一次做很多的事情,但是要
依序進行
但是有一個重點,他必須是一個
return type為
void的Function
為什麼?因為如果你具有
return type非
void的話
後一個的
return value會覆蓋掉前一個的
return value
來個範例好了,這樣比較容易懂
Eg.
public delegate long ReturnValue(
void );
private static long FuncA(
void )
{
return 100;
}
private static long FuncB(
void )
{
return 999;
}
private static void main(
string[] args )
{
ReturnValue FuncPtr = new ReturnValue(FuncA);
FuncPtr += new ReturnValue(FuncB);
Console.WriteLine(FuncPtr().ToString());
}
接著程式跑出來的結果就會是:999
如同前面所說,如果
return type不是
void的話
return value統統都會被後面一個覆蓋
就算
return value是
void,也是會被後一個覆蓋
不過因為
void沒有東西,所以覆蓋也等於沒有作用
好了,這次真的把delegate講完了,下面開始要講
Event了
先講
delegate的原因,是因為
Event是建立在
delegate之上
也就是
Event以
delegate為
基礎而產生的
那Event怎麼使用?
既然是建立在delegate上,就必須先有delegate才可以動
所以先來個範例
Eg.
public delegate void SH_Delegate(
void );
public event SH_Delegate Event_Action;
這裡用到一個新的修飾詞:
event
他就是用來宣告一個
Event
但是
Event是需要一個Instance才能動作
所以我們就將new一個Instance給他
Eg.
class Event_Ex
{
static void (
string[] args)
{
Event_Ex Instance =
new Event_Ex();
.......
.......
.......
.......
}
}
接著就是當
Event發生時,所要做的事情告訴他
這個部份則是像下面這樣:
class Event_Ex
{
static void (
string[] args)
{
SH_Delegate FuncPtr = new SH_Delegate(Function);
Event_Ex Instance =
new Event_Ex();
Instance.Event += new SH_Delegate(FuncPtr);
.......
}
}
最後,等到適當的時機在Trigger就好了
那Trigger的方式就是直接呼叫
Instance.Event_Action();
或是
Instance.Event_Action.Invoke();
兩者用法相同
好啦,終於在三篇內講完了。
有機會再見,拜拜。
--
Ultimate Treein
ˍˍ
▕慕京▏
▕子印▏
 ̄ ̄
http://septemhill.blogspot.com
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.118.45.191