上面一篇,應該要把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