国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

事件與委托的聯(lián)系和區(qū)別

2019-11-17 02:48:48
字體:
供稿:網(wǎng)友

事件與委托的聯(lián)系和區(qū)別

事件與委托的聯(lián)系和區(qū)別

-事件是一種特殊的委托,或者說是受限制的委托,是委托一種特殊應(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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 大埔区| 岳池县| 石屏县| 都兰县| 青浦区| 苗栗市| 乐东| 云梦县| 阿勒泰市| 淅川县| 格尔木市| 河东区| 宣武区| 喀喇沁旗| 高邑县| 洪湖市| 灌云县| 凤翔县| 民权县| 定边县| 鄄城县| 刚察县| 正镶白旗| 临猗县| 夏河县| 泾阳县| 通江县| 扎囊县| 策勒县| 贵州省| 龙门县| 寿光市| 南和县| 蒲江县| 永修县| 余庆县| 茂名市| 金川县| 汝南县| 衡阳县| 平湖市|