委派 (C# 程式設計手冊)
更新:2007 年 11 月
委派 (Delegate) 是定義方法簽章的型別,可以與任何具有相容簽章的方法產生關聯。您可以透過委派叫用 (Invoke) 或呼叫方法。委派可以用來將方法當做引數傳遞給其他方法。事件處理常式就是透過委派叫用的方法。您建立自訂方法後,Windows 控制項之類的類別就會在特定事件發生時呼叫您的方法。下列範例示範委派宣告:
public delegate int PerformCalculation(int x, int y);
任何來自可存取的類別 (Class) 或結構 (Struct) 且與委派簽章 (由傳回型別和參數所構成) 相符的方法,都可以指派給該委派。此方法可以是靜態或執行個體方法 (Instance Method)。如此即可用程式設計的方式變更方法呼叫,也可將新的程式碼外掛到現有的類別中。只要您知道委派的簽章為何,即可指派自己的方法。
注意事項: |
---|
在方法多載的內容中,方法的簽章並不包括傳回值。不過在委派的內容中,簽章卻包含有傳回值。換句話說,方法必須與委派有相同的傳回值。 |
由於委派能夠將方法當做參數來參考,使得委派很適合用來定義回呼方法。例如,您可以將比較兩個物件的方法參考傳遞至排序演算法。分隔開比較程式碼,可讓您以更通用的方式撰寫演算法。
委派概觀
委派有下列屬性:
委派與 C++ 函式指標類似,但為型別安全。
委派允許將方法當做參數傳遞。
委派可用於定義回呼方法。
您可將委派鏈結在一起,例如,可在單一事件上呼叫多個方法。
方法不需要完全符合委派簽章。如需詳細資訊,請參閱Covariance and Contravariance委派中的 Covariance 和 Contravariance (C# 程式設計手冊)。
C# 2.0 版引進了匿名方法 (Anonymous Method) 的概念,讓程式碼區塊能夠當做參數傳遞,以取代個別定義的方法。C# 3.0 引進 Lambda 運算式,做為更簡潔的內嵌 (Inline) 程式碼區塊撰寫方式。匿名方法與 Lambda 運算式 (在特定內容中) 都會編譯為委派型別 (Delegate Type)。現在,這些功能合稱為「匿名函式」(Anonymous Function)。如需 Lambda 運算式的詳細資訊,請參閱 匿名函式 (C# 程式設計手冊)。
本章節內容
C# 語言規格
如需詳細資料,請參閱 C# 語言規格中的下列章節:
1.11 委派
4.2.6 委派型別
7.5.5.3 委派引動過程
15 委派