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