共用方式為


C 中的委派和事件簡介#

委派在 .NET 中提供 延遲繫結 機制。 晚期綁定指的是您建立一個演算法,而呼叫者也會提供至少一個方法以實作部分的演算法。

例如,請考慮排序天文學應用程式中的星號清單。 您可以選擇根據它們與地球的距離或恆星的震級,或他們感知到的亮度來排序這些恆星。

在所有這些情況下,Sort() 方法基本上都是相同的:基於某種比較來排列清單中的項目。 比較兩顆星的程式代碼會針對每個排序順序而有所不同。

這類解決方案已用於軟體半個世紀。 C# 語言中的委派概念提供了高級別的語言支援,以及與該概念相關的類型安全性。

如您稍後在此系列中看到的,您為這類演算法撰寫的 C# 程式代碼是類型安全的。 編譯程式可確保參數和傳回型別相符。

函式指標 支援類似的案例,您需要對呼叫慣例有更多的控制權。 使用新增至委派類型的虛擬方法,叫用與委派相關聯的程序代碼。 使用函式指標,您可以指定不同的慣例。

代理的語言設計目標

語言設計者列舉了最終成為委派的特性的數個目標。

小組想要可用於任何晚期系結算法的通用語言建構。 委派可讓開發人員瞭解一個概念,並在許多不同的軟體問題中使用相同的概念。

其次,團隊想要同時支援單一和多播方法呼叫。 (多播委派是將多個方法呼叫鏈結在一起的委派。您將在 本系列稍後看到範例。

團隊希望代表們支持開發者預期來自所有 C# 構件的相同類型安全性。

最後,小組認識到,事件模式是委派或任何晚綁定算法可能有用的一種特定模式。 小組想要確保委派的程式代碼可以提供 .NET 事件模式的基礎。

所有工作的結果是 C# 和 .NET 中的委託和事件支援。

本系列中的其餘文章將涵蓋使用委派和事件時所使用的語言功能、連結庫支援和常見慣用語。 您將了解:

  • delegate關鍵詞及其產生的程序代碼。
  • 類別中的 System.Delegate 功能,以及這些功能的使用方式。
  • 如何建立型別安全委派。
  • 如何建立可透過委派調用的方法。
  • 如何使用 Lambda 運算式來處理委派和事件。
  • 委派如何成為 LINQ 的建構元素之一。
  • 委派是 .NET 事件模式的基礎,以及委派的不同方式。

讓我們開始吧。

下一步