天天看點

《Effective C#》讀書筆記——條目24:用委托實作回調<使用C#表達設計>

  在C#語言中,回調是通過委托來實作的。委托為我們提供了安全的回調定義,大多數委托都和事件相關,但這不是委托的全部應用場景,當類之間需要通信,并且我們希望一種比接口更加松耦合的機制時,委托便是最佳選擇。委托允許我們在運作時配置目标并且通知多個客戶對象,委托對象中包含一個引用,該方法可以使靜态方法也可以是執行個體方法。使用委托,我們可以和一個或者多個在運作時聯系起來的客戶對象進行通信。

  回調和委托在C#中非常常用,C#為委托提供了精簡的文法——Lambda表達式。同時.NET還内建了很多常用的委托形式,它們包含在這三個泛型委托中:

 Linq中大量使用了這些概念,List<T>中也包含了很多的回調方法,如下:

<a></a>

   LINQ所有的功能都依賴于委托。回調也是用在WPF和Windows Forms中跨線程調用的封裝(marshalling)上。在.NET Framework中需要傳入方法的地方,架構都會使用委托,并允許調用者使用Lambda表達式提供。

   C#中的委托都是多點傳播委托(multicast delegate)。多點傳播委托将會把所有添加到委托中的目标函數組合成一個單一的調用。在這裡我們需要注意兩點:

1.如果有委托調用出現異常,那麼委托鍊會被中斷,這種方式不能保證安全。 2.多點傳播委托傳回的将是委托鍊上最後一個函數調用的傳回值。
委托是在運作時進行回調的最好方式,這種方式對客戶類的要求更加簡單,你可以在運作時配置委托目标。另外,委托也支援多個客戶目标。在.NET中,客戶回調應該使用委托來實作。

本文轉自gyzhao部落格園部落格,原文連結:http://www.cnblogs.com/IPrograming/archive/2013/01/17/EffectiveCSharp_24.html,如需轉載請自行聯系原作者

繼續閱讀