-事件是一種特殊的委托,或者說是受限制的委托,是委托一種特殊應(yīng)用,只能施加+=,-=操作符。二者本質(zhì)上是一個(gè)東西。
-event ActionHandler Tick; // 編譯成創(chuàng)建一個(gè)私有的委托示例, 和施加在其上的add, remove方法.
-event只允許用add, remove方法來操作,這導(dǎo)致了它不允許在類的外部被直接觸發(fā),只能在類的內(nèi)部適合的時(shí)機(jī)觸發(fā)。委托可以在外部被觸發(fā),但是別這么用。
-使用中,委托常用來表達(dá)回調(diào),事件表達(dá)外發(fā)的接口。
-委托和事件支持靜態(tài)方法和成員方法, delegate(void * pthis, f_ptr), 支持靜態(tài)返方法時(shí), pthis傳null.支持成員方法時(shí), pthis傳被通知的對象.
-委托對象里的三個(gè)重要字段是, pthis,f_ptr, pnext, 也就是被通知對象引用, 函數(shù)指針/地址, 委托鏈表的下一個(gè)委托節(jié)點(diǎn).
1. 怎樣定義委托類型?
delegate + function signature // delegate相當(dāng)于class關(guān)鍵字, function name相當(dāng)于定義的委托類型.
delegate void Mydelegate();
2. 怎樣定義委托實(shí)例?Mydelegate my;(這個(gè)是無返回值的簡單委托定義);
3. 怎樣定義事件?
先定義委托類型delegate void ActionHandler(object sender, EventArgs args);其實(shí)這個(gè)參數(shù)要不要都可以。
再定義事件實(shí)例 event ActionHandler Tick;
記憶的方法:
delegate關(guān)鍵字類比于class關(guān)鍵字, 定義的是一種委托類型,然后再創(chuàng)建委托示例.
創(chuàng)建委托實(shí)例時(shí), 用event關(guān)鍵字來修飾就變成了創(chuàng)建一個(gè)事件. 也就是事件是一種特殊的委托.
1 class MyClass 2 { 3 public delegate void CompletedEventHandler(); 4 5 public event CompletedEventHandler WorkCompleted; 6 public CompletedEventHandler WorkCompletedDelegate; 7 8 public void Fire() 9 {10 if (this.WorkCompleted != null)11 {12 this.WorkCompleted();13 }14 15 if (this.WorkCompletedDelegate != null)16 {17 this.WorkCompletedDelegate();18 }19 }20 }21 class PRogram22 { 23 static void TestEvent()24 {25 Console.WriteLine("test event");26 }27 28 static void TestDelegate()29 {30 Console.WriteLine("test delegate");31 }32 33 static void Main(string[] args)34 {35 36 MyClass myObject = new MyClass();37 myObject.WorkCompletedDelegate += TestDelegate;38 myObject.WorkCompleted += TestEvent;39 }轉(zhuǎn)載至http://m.survivalescaperooms.com/dirichlet/archive/2013/09/15/3247020.html;
看懂了此篇文章之后,在看看上篇的事件的作用與用法會有感觸,http://m.survivalescaperooms.com/cn-blogs/p/3413652.html
新聞熱點(diǎn)
疑難解答
圖片精選