[Event]委派 & 事件 (範例)
環境:.NET 2.0
內容:下載點
1. 只會Run最後註冊的事件: BaseSingleDelegatePage.cs , /Single
2. Run所有註冊的事件: BaseSingleDelegatePage.cs , /Multi
3. 只用委派也行: DelegateOnly
4. 事件 & 委派的差別
我原本以為只要註冊(+=)處理函式, 程式就會依序執行, 今天一測, 完全不是那麼一回事,
以下這種標準程式碼, 只會Run最後註冊的事件
public event Echo EchoHandler;
public void Page_Load(object sender, EventArgs e)
{
if (EchoHandler != null)
{
Response.Output.WriteLine(EchoHandler(sender, e) + "<br />");
}
}
必須用下面這種才會依序執行
public event Echo EchoHandler;
public void Page_Load(object sender, EventArgs e)
{
if (EchoHandler != null)
{
object[] param = new object[] { sender, e };
foreach (Delegate dlgt in EchoHandler.GetInvocationList())
{
Response.Output.WriteLine(dlgt.DynamicInvoke(param) + "<br/>");
}
}
}
然後我一直在想加 event 到底是為什麼?
推論應該是可以用 add(+=) remove(-=) 來堆疊處理函式,
結果, 被打了一巴掌, 在同一個樹系(子類別), 就算不用 event 修飾詞, 亦可用+=及-=.
最後只好求助G大神, 剛好在對岸找到答案,
(1) 若沒用Event, 你無法在外部的類別直接去使用+=及-=語法,
// 錯誤 2 無法將型別 'BaseSingleDelegatePage.Echo' 隱含轉換為 'BaseDelegatePage.Echo'
d.EchoHandler += new BaseSingleDelegatePage.Echo(d_EchoHandler);
若是宣告為public, 可以直接引用它,
(2) 反之, 若有宣告為 event, 你可以用+=及-=語法, 但不能直接引用它
d.EchoHandler();