-事件是一種特殊的委託,或者說是受限制的委託,是委託一種特殊應用,只能施加+=,-=操做符。兩者本質上是一個東西。html
-event ActionHandler Tick; // 編譯成建立一個私有的委託示例, 和施加在其上的add, remove方法. 函數
-event只容許用add, remove方法來操做,這致使了它不容許在類的外部被直接觸發,只能在類的內部適合的時機觸發。委託能夠在外部被觸發,可是別這麼用。post
-使用中,委託經常使用來表達回調,事件表達外發的接口。this
-委託和事件支持靜態方法和成員方法, delegate(void * pthis, f_ptr), 支持靜態返方法時, pthis傳null.支持成員方法時, pthis傳被通知的對象.url
-委託對象裏的三個重要字段是, pthis, f_ptr, pnext, 也就是被通知對象引用, 函數指針/地址, 委託鏈表的下一個委託節點.spa
1. 怎樣定義委託類型?指針
delegate + function signature // delegate至關於class關鍵字, function name至關於定義的委託類型.code
delegate void Mydelegate();htm
2. 怎樣定義委託實例? Mydelegate my;(這個是無返回值的簡單委託定義);對象
3. 怎樣定義事件?
先定義委託類型 delegate void ActionHandler(object sender, EventArgs args);其實這個參數要不要均可以。
再定義事件實例 event ActionHandler Tick;
記憶的方法:
delegate關鍵字類比於class關鍵字, 定義的是一種委託類型,而後再建立委託示例.
建立委託實例時, 用event關鍵字來修飾就變成了建立一個事件. 也就是事件是一種特殊的委託.
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 Program 22 { 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 }
轉載至http://www.cnblogs.com/dirichlet/archive/2013/09/15/3247020.html;
看懂了此篇文章以後,在看看上篇的事件的做用與用法會有感觸,http://www.cnblogs.com/cn-blogs/p/3413652.html