作者godman362 (Shizuru)
看板NUU_CSIE
標題[心得] deleate & Event (2)
時間Sat May 9 14:41:55 2009
上一篇提到delegate的部份
雖然大致上基本的東西都講清楚了
不過有些實作上的規矩還是來強調一下好了,以下:
public delegate type DelegateName(
Parameter );
像上面這個delegate的宣告,就必須在一個class裡面
不可以在namespace底下直接宣告
Eg.
(1)
namespace NameSpace_Name
{
public delegate void DelegateName (
Parameter );
//Wrong
......
......
......
......
}
(2)
namespace NameSpace_Name
{
class Program
{
public delegate void DelegateName (
void );
//Right
}
......
......
......
......
}
(3)
namespace NameSpace_Name
{
delegate void DelegateName ( void )
//Right
}
再來,delegate一次可以做多少事情?
答案:
不知道,我沒測過他的極限
這也就是說,一個delegate可以做很多事情,但是是
依序進行
這個可以做很多事情的delegate,稱之為
Multicast(包涵
多重委派、
多重事件)
接著就要問,怎麼讓他一次做很多事情?
很簡單,只要將函數用「+=」的方式加入這個delegate中
然後呼叫這個delegate,就可以
依序幫你做完你指定的工作
所以,再來個範例吧
Eg.
public delegate void SH_Delegate(
void );
public static void Show(
void )
{
Console.WriteLine("Hi, Mr.Hill .");
}
public static void Say(
void )
{
Console.WriteLine("Say Love for you .");
}
private static void main(
string[] args )
{
SH_Delegate FuncPtr = new SH_Delegate(Show);
FuncPtr = new SH_Delegate(Say);
FuncPtr();
}
在main中,我指定了Show Function函數給FuncPtr
下面又用「+=」將Say Function給FuncPtr
所以目前的FuncPtr會有兩個Function
但是他是以
Queue的方式來呼叫所assign的函數,就是前面說提到的「
依序」
也就是說,在呼叫FuncPtr之後
會先執行Show,在執行Say
呃,這篇似乎又沒講到Event
那下一篇再見(?)
--
ˍˍ
很多人在即將失去的時候,不知他即將失去,最後他就真正失去 ▕天險▏
其實,一個不曾失去的人最可憐。因為,他永遠學不會什麼叫珍惜。▕刀藏▏
 ̄ ̄
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.118.46.59
推 sct830:前幾天我也在看委派的東西 可是我寫在網誌上 可以參考看 05/09 22:14
→ sct830:我不會縮網址= = www.wretch.cc/blog/stt830/32257454 05/09 22:15
→ godman362:其中你提到的Invoke 05/10 07:17
→ godman362:其實可用可不用 05/10 07:18
→ godman362:FuncPtr.Invoke()和FuncPtr()其實一樣 05/10 07:18
※ 編輯: godman362 來自: 122.118.55.133 (05/10 22:10)