C#中的委托類似于C或C++中的函數指針。使用委托使程序員可以將方法引用封裝在委托對象內。然后可以將該委托對象傳遞給可調用所引用方法的代碼,而不必在編譯時知道將調用哪個方法。與C或C++中的函數指針不同,委托是面向對象,而且是類型安全的。
C#中的“事件”是當對象發生某些事情時,類向該類的客戶提供通知的一種方法。事件最常見的用途是用于圖形用戶界面;通常,表示界面中的控件的類具有一些事件,當用戶對控件進行某些操作(如單擊某個按鈕)時,將通知這些事件。
使用委托來聲明事件。委托對象封裝一個方法,以便可以匿名調用該方法。事件是類允許客戶為其提供方法(事件發生時應調用這些方法)的委托的一種方法。事件發生時,將調用其客戶提供給它的委托。
注明:委托是對方法的包裝 在不確定要調用什么方法時候而又不能用抽象或者多態實現的時候用委托。
比如一個button,當點擊肯定要觸發事件,做一些處理,如果你是這個控件的開發者,你怎么知道當點擊是要處理什么?你這個button會被什么容器所包含?所以你必須公布一個event出去,用控件的人具體去實現其功能。
參考:
1、如下情況宜使用委托:
只調用單個方法時.
當一個類需要方法說明的多重執行時.
期望使用靜態方法執行規范時.
期望得到一個類似事件的模式時.
調用者無需知道無需獲取定義方法的對象時
只想給少數既定組件分發執行規范時.
想要簡單的組成結構時.
2、如下情況宜使用接口:
當規范定義了一組需要調用的相關方法時.
一個類僅代表性地執行一次規范時.
接口的調用者想映射接口類型以獲取其他類或接口時
3、對函數指針以.net的方式進行的封裝,其實就是一個class。
應用最多的就是事件,在事件的情況下委托就變成了對回調函數指針的封裝。
推薦:看看《.net框架程序設計》(李建忠譯)