事件與委託的聯繫和區別

事件與委託的聯繫和區別

-事件是一種特殊的委託,或者說是受限制的委託,是委託一種特殊應用,只能施加+=,-=操做符。兩者本質上是一個東西。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

相關文章
相關標籤/搜索