C# 中委派和事件的簡介
委派提供 .NET 中的「晚期繫結」機制。 「晚期繫結」表示您建立演算法,在其中,呼叫端也會提供至少一個方法來實作演算法的一部分。
例如,請考慮排序天文學應用程式中的星星清單。 您可以選擇排序這些星星與地球的距離、星星的亮度,或其可察覺的亮度。
在所有這些情況下,Sort() 方法的做法基本上相同︰根據某個比較來排列清單中的項目。 針對每個排序順序,比較兩顆星的程式碼會不同。
這類解決方案已用於軟體達中半世紀之久。 C# 語言委派概念提供一流的語言支援,以及這類概念的型別安全。
此系列稍後將會展示您為這類演算法所撰寫的 C# 程式碼,是型別安全的程式碼。 該編譯器可確保類型可符合引數和傳回型別。
函式指標支援對呼叫慣例需要更多控制能力的類似案例。 使用新增至委派型別的虛擬方法,叫用與委派相關聯的程式碼。 您可以使用函式指標來指定不同的慣例。
委派的語言設計目標
語言設計人員會針對最後成為委派的功能列舉數個目標。
小組想要將通用語言建構用於任何晚期繫結演算法。 委派讓開發人員想到一種概念,並將這相同的概念運用在許多不同的軟體問題之上。
其次,小組想要同時支援單一和多點傳送方法呼叫。 (多點傳送委派是鏈結在一起之多個方法呼叫的委派。您將在本系列稍後看到範例。)
小組想要委派支援開發人員期待所有 C# 建構的相同型別安全。
最後,小組認定事件模式是對於委派或任何晚期繫結演算法,都十分實用的一種特定模式。 小組想要確保委派的程式碼可以提供 .NET 事件模式的基礎。
該工作的結果已是 C# 和 .NET 中的委派和事件支援。
本系列中其他的文章,將涵蓋使用委派和事件時,所使用的語言功能、程式庫支援和常見慣用語。 您將了解:
delegate
關鍵字及其產生的程式碼。System.Delegate
類別中的功能,以及如何使用這些功能。- 如何建立型別安全委派。
- 如何建立可透過委派叫用的方法。
- 如何使用 Lambda 運算式,使用委派和事件。
- 委派要如何成為 LINQ 的其中一個建置區塊。
- 委派要如何作為 .NET 事件模式的基礎,以及委派的不同之處。
這就開始吧。