紅知博客

          知其然,亦知其所以然
          posts - 32, comments - 35, trackbacks - 0, articles - 0
                              使用委托的優(yōu)點(diǎn),委托和事件的區(qū)別和聯(lián)系

                 C#中的委托類似于C或C++中的函數(shù)指針。使用委托使程序員可以將方法引用封裝在委托對(duì)象內(nèi)。然后可以將該委托對(duì)象傳遞給可調(diào)用所引用方法的代碼,而不必在編譯時(shí)知道將調(diào)用哪個(gè)方法。與C或C++中的函數(shù)指針不同,委托是面向?qū)ο螅沂穷愋桶踩摹?

            C#中的“事件”是當(dāng)對(duì)象發(fā)生某些事情時(shí),類向該類的客戶提供通知的一種方法。事件最常見(jiàn)的用途是用于圖形用戶界面;通常,表示界面中的控件的類具有一些事件,當(dāng)用戶對(duì)控件進(jìn)行某些操作(如單擊某個(gè)按鈕)時(shí),將通知這些事件。

            使用委托來(lái)聲明事件。委托對(duì)象封裝一個(gè)方法,以便可以匿名調(diào)用該方法。事件是類允許客戶為其提供方法(事件發(fā)生時(shí)應(yīng)調(diào)用這些方法)的委托的一種方法。事件發(fā)生時(shí),將調(diào)用其客戶提供給它的委托。



          注明委托是對(duì)方法的包裝       在不確定要調(diào)用什么方法時(shí)候而又不能用抽象或者多態(tài)實(shí)現(xiàn)的時(shí)候用委托。

                      比如一個(gè)button,當(dāng)點(diǎn)擊肯定要觸發(fā)事件,做一些處理,如果你是這個(gè)控件的開(kāi)發(fā)者,你怎么知道當(dāng)點(diǎn)擊是要處理什么?你這個(gè)button會(huì)被什么容器所包含?所以你必須公布一個(gè)event出去,用控件的人具體去實(shí)現(xiàn)其功能。  

          參考
                   1、如下情況宜使用委托:     
              
                                只調(diào)用單個(gè)方法時(shí).     
                                當(dāng)一個(gè)類需要方法說(shuō)明的多重執(zhí)行時(shí).     
                                 期望使用靜態(tài)方法執(zhí)行規(guī)范時(shí).     
                                 期望得到一個(gè)類似事件的模式時(shí).     
                                 調(diào)用者無(wú)需知道無(wú)需獲取定義方法的對(duì)象時(shí)     
                                 只想給少數(shù)既定組件分發(fā)執(zhí)行規(guī)范時(shí).     
                                 想要簡(jiǎn)單的組成結(jié)構(gòu)時(shí).     

                    2、如下情況宜使用接口:   
              
                                 當(dāng)規(guī)范定義了一組需要調(diào)用的相關(guān)方法時(shí).     
                                 一個(gè)類僅代表性地執(zhí)行一次規(guī)范時(shí).     
                                 接口的調(diào)用者想映射接口類型以獲取其他類或接口時(shí)

                     3、對(duì)函數(shù)指針以.net的方式進(jìn)行的封裝,其實(shí)就是一個(gè)class。   
              
                            應(yīng)用最多的就是事件,在事件的情況下委托就變成了對(duì)回調(diào)函數(shù)指針的封裝。   
              
                            推薦:看看《.net框架程序設(shè)計(jì)》(李建忠譯)

          Feedback

          # re: 使用委托的優(yōu)點(diǎn),委托和事件的區(qū)別和聯(lián)系  回復(fù)  更多評(píng)論   

          2008-07-28 17:01 by he
          OK

          # re: 使用委托的優(yōu)點(diǎn),委托和事件的區(qū)別和聯(lián)系  回復(fù)  更多評(píng)論   

          2008-10-30 16:01 by 事實(shí)上
          熱騰騰
          我要啦免费统计
          主站蜘蛛池模板: 甘肃省| 新巴尔虎左旗| 瓦房店市| 桦南县| 上杭县| 剑川县| 确山县| 吉木萨尔县| 吴堡县| 麻栗坡县| 庆元县| 遂昌县| 京山县| 德庆县| 泗水县| 射阳县| 庄河市| 武义县| 康保县| 搜索| 林芝县| 长垣县| 安徽省| 乌拉特中旗| 平阳县| 临夏县| 梁山县| 禄劝| 彭阳县| 黑龙江省| 乳源| 罗山县| 民勤县| 宁德市| 昭平县| 平利县| 达拉特旗| 滨州市| 余干县| 高青县| 江西省|