紅知博客

          知其然,亦知其所以然
          posts - 32, comments - 35, trackbacks - 0, articles - 0

          使用委托的優點,委托和事件的區別和聯系

          Posted on 2007-09-14 09:45 紅子 閱讀(5497) 評論(2)  編輯  收藏 所屬分類: C#/.NET設計模式
                              使用委托的優點,委托和事件的區別和聯系

                 C#中的委托類似于C或C++中的函數指針。使用委托使程序員可以將方法引用封裝在委托對象內。然后可以將該委托對象傳遞給可調用所引用方法的代碼,而不必在編譯時知道將調用哪個方法。與C或C++中的函數指針不同,委托是面向對象,而且是類型安全的。

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

            使用委托來聲明事件。委托對象封裝一個方法,以便可以匿名調用該方法。事件是類允許客戶為其提供方法(事件發生時應調用這些方法)的委托的一種方法。事件發生時,將調用其客戶提供給它的委托。



          注明委托是對方法的包裝       在不確定要調用什么方法時候而又不能用抽象或者多態實現的時候用委托。

                      比如一個button,當點擊肯定要觸發事件,做一些處理,如果你是這個控件的開發者,你怎么知道當點擊是要處理什么?你這個button會被什么容器所包含?所以你必須公布一個event出去,用控件的人具體去實現其功能。  

          參考
                   1、如下情況宜使用委托:     
              
                                只調用單個方法時.     
                                當一個類需要方法說明的多重執行時.     
                                 期望使用靜態方法執行規范時.     
                                 期望得到一個類似事件的模式時.     
                                 調用者無需知道無需獲取定義方法的對象時     
                                 只想給少數既定組件分發執行規范時.     
                                 想要簡單的組成結構時.     

                    2、如下情況宜使用接口:   
              
                                 當規范定義了一組需要調用的相關方法時.     
                                 一個類僅代表性地執行一次規范時.     
                                 接口的調用者想映射接口類型以獲取其他類或接口時

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

          Feedback

          # re: 使用委托的優點,委托和事件的區別和聯系  回復  更多評論   

          2008-07-28 17:01 by he
          OK

          # re: 使用委托的優點,委托和事件的區別和聯系  回復  更多評論   

          2008-10-30 16:01 by 事實上
          熱騰騰
          我要啦免费统计
          主站蜘蛛池模板: 凉城县| 文安县| 根河市| 晋中市| 绥棱县| 南丰县| 连山| 青岛市| 富宁县| 澎湖县| 屯留县| 景德镇市| 上高县| 克什克腾旗| 于都县| 克山县| 墨江| 浪卡子县| 祁阳县| 嫩江县| 林周县| 九江县| 乐亭县| 景宁| 武汉市| 顺义区| 商河县| 尼勒克县| 茶陵县| 高雄市| 旌德县| 镇远县| 嫩江县| 米易县| 金平| 宁晋县| 沽源县| 方山县| 磐石市| 太仆寺旗| 安平县|