精華區beta NUU_CSIE 關於我們 聯絡資訊
上面一篇,應該要把delegate全部講完才對 不過打完送出之後,才發現我又少打了一些東西 於是在這邊再次補齊: 前面提到delegateMulticast 就是可以一次做很多的事情,但是要依序進行 但是有一個重點,他必須是一個return typevoid的Function 為什麼?因為如果你具有return typevoid的話 後一個的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 valuevoid,也是會被後一個覆蓋 不過因為void沒有東西,所以覆蓋也等於沒有作用 好了,這次真的把delegate講完了,下面開始要講Event了 先講delegate的原因,是因為Event是建立在delegate之上 也就是Eventdelegate基礎而產生的 那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