作者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