委派在 .NET 中提供 延遲繫結 機制。 晚期綁定指的是您建立一個演算法,而呼叫者也會提供至少一個方法以實作部分的演算法。
例如,請考慮排序天文學應用程式中的星號清單。 您可以選擇根據它們與地球的距離或恆星的震級,或他們感知到的亮度來排序這些恆星。
在所有這些情況下,Sort() 方法基本上都是相同的:基於某種比較來排列清單中的項目。 比較兩顆星的程式代碼會針對每個排序順序而有所不同。
這類解決方案已用於軟體半個世紀。 C# 語言中的委派概念提供了高級別的語言支援,以及與該概念相關的類型安全性。
如您稍後在此系列中看到的,您為這類演算法撰寫的 C# 程式代碼是類型安全的。 編譯程式可確保參數和傳回型別相符。
函式指標 支援類似的案例,您需要對呼叫慣例有更多的控制權。 使用新增至委派類型的虛擬方法,叫用與委派相關聯的程序代碼。 使用函式指標,您可以指定不同的慣例。
代理的語言設計目標
語言設計者列舉了最終成為委派的特性的數個目標。
小組想要可用於任何晚期系結算法的通用語言建構。 委派可讓開發人員瞭解一個概念,並在許多不同的軟體問題中使用相同的概念。
其次,團隊想要同時支援單一和多播方法呼叫。 (多播委派是將多個方法呼叫鏈結在一起的委派。您將在 本系列稍後看到範例。
團隊希望代表們支持開發者預期來自所有 C# 構件的相同類型安全性。
最後,小組認識到,事件模式是委派或任何晚綁定算法可能有用的一種特定模式。 小組想要確保委派的程式代碼可以提供 .NET 事件模式的基礎。
所有工作的結果是 C# 和 .NET 中的委託和事件支援。
本系列中的其餘文章將涵蓋使用委派和事件時所使用的語言功能、連結庫支援和常見慣用語。 您將了解:
-
delegate
關鍵詞及其產生的程序代碼。 - 類別中的
System.Delegate
功能,以及這些功能的使用方式。 - 如何建立型別安全委派。
- 如何建立可透過委派調用的方法。
- 如何使用 Lambda 運算式來處理委派和事件。
- 委派如何成為 LINQ 的建構元素之一。
- 委派是 .NET 事件模式的基礎,以及委派的不同方式。
讓我們開始吧。