.NET Framework中的事件機(jī)制使用了委托(回調(diào))
事件作為一種常用的方法來解除事件源對(duì)象(生成事件的對(duì)象)與事件接收器對(duì)象(接受事件通知的對(duì)象)之間的耦合。
委托 類似于應(yīng)用程序中指向?qū)ο笾蟹椒ǖ闹羔?
3個(gè)步驟:
1 聲明委托類型
2 創(chuàng)建委托對(duì)象,并將該對(duì)象綁定指定方法上
3 使用委托對(duì)象來調(diào)用方法
.NET Framework支持兩種類型的委托
單播委托:允許一個(gè)對(duì)象上調(diào)用一個(gè)方法
多播委托:允許在不同對(duì)象上調(diào)用一系列方法,維護(hù)一個(gè)調(diào)用對(duì)象
使用多播委托的步驟:
1 定義一個(gè)委托類型
2 編寫具有相同簽名方法作為委托
3 創(chuàng)建委托對(duì)象,將它綁定到需要通過委托調(diào)用的第一個(gè)方法
4 創(chuàng)建另一個(gè)委托對(duì)象,綁定到下一個(gè)需要調(diào)用的方法
5 System.Delegate類的Combine方法,合并成一個(gè)集成的多播委托
異步委托 可以在后臺(tái)線程中調(diào)用的方法
調(diào)用委托實(shí)例三種方式:
1 同步調(diào)用,等待方法執(zhí)行完畢,最常見
2 異步調(diào)用,等待方法執(zhí)行完畢, EndInvoke(),但在方法執(zhí)行完畢之前調(diào)用
3 異步調(diào)用,注冊(cè)一個(gè)回調(diào)方法,一旦執(zhí)行完畢,給出通知
事件的實(shí)現(xiàn) 使用委托存儲(chǔ)訂閱的事件處理方法,典型的Observer設(shè)計(jì)模式的一種實(shí)現(xiàn)
每個(gè)事件,必須指定下面兩項(xiàng)內(nèi)容:事件名,事件的簽名(參數(shù)列表)
System.EventHandler 一個(gè)內(nèi)置的委托
事件不能有返回類型,只能從事件源對(duì)象到事件接收方對(duì)象的單向信息流
靜態(tài)事件 較少見,相對(duì)于一般事件
定義自己注冊(cè)的方法
大多數(shù)情況下不需要定義定制的注冊(cè)方法,但這種技術(shù)可以使代碼最簡(jiǎn)潔和快速。
Framework中,大多數(shù)控件都使用定制的注冊(cè)方法。
基類和子類不能引用同一個(gè)委托
繼承和多態(tài)性 所有的面向?qū)ο笳Z言都支持,多態(tài)性由繼承支持,把一種類型的對(duì)象視作另一種類型的實(shí)例的多態(tài)性
基類定義為virtual,派生類就可以重寫基類的操作
標(biāo)記為非虛的方法不能重寫
操作聲明為virtual,可以重寫該實(shí)現(xiàn)
操作聲明為abstract,必須重寫該實(shí)現(xiàn)
類 繼承自System.Object
結(jié)構(gòu) 繼承自System.ValueType,繼承自System.Object轉(zhuǎn)換成它實(shí)現(xiàn)的接口類型,對(duì)于引用類型代替類型要小心,不能調(diào)用接口不支持的任何對(duì)象。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
