複製鏈接
請複製以下鏈接發送給好友

delegate

(.NET)

鎖定
委託(delegate)是一種類型安全的函數指針,用於通用語言運行庫(CLI)。在C#中,delegate是一種class,包裝了一個或多個函數指針及綁定的類實例。Delegate用來實現函數回調與事件接收(event listener)。Delegate對象可以作為參數傳遞給其他函數,以引用(referenced)封裝在delegate對象中的函數,而無需在編譯時刻就綁定被調用函數。
一旦為委託分配了函數方法,委託將與該函數方法具有完全相同的行為。與委託的類型特徵(由返回類型和參數組成)匹配的任何方法都可以分配給該委託。
中文名
委託
外文名
delegate
性    質
是一種引用類型
類似於
函數指針
委    託
面向對象類型安全

delegate技術實現細節

“委託”作為類,繼承自System.MulticastDelegate(抽象類)。可以認為包含:一個類對象實例的地址(Target屬性),該類的一個方法的地址(Method屬性),以及另一個“委託”實例的引用(reference)。因此引用一個“委託”對象,可能實際上引用了多個“委託”的實例。“委託”對象被調用時,依次調用裏面的多個“委託”的實例。這對於事件驅動的程序比較有用。
如果“委託”封裝了一個靜態函數,則其內部的綁定的類對象地址為null。
可以通過Delegate類的GetInvocationList()取出這些委託,並查看其Target和Method屬性,獲取所引用的方法名等信息。 [1] 

delegate類型特徵

型籤(英語:type signature)或型標(type annotation)是計算機科學中對程序的函數、方法、子過程、以及變量等給出其類型。特別是對函數給出其輸入參數數量、類型與次序及輸出結果的類型。許多編譯器產生的內部使用的函數名包含了其類型特徵,這稱為名字修飾,給鏈接器辨別不同的函數提供了方便。
類型特徵的現代應用:
  • 面嚮對象語言使用的interface,實際上是利用了函數類型特徵的模板。
  • C++支持的函數重載實際上用不同的類型特徵來辨識。 [1] 

delegate函數指針

函數指針是一種在CC++D語言、其他類C語言和Fortran2003中的指針。函數指針可以像一般函數一樣,用於調用函數、傳遞參數。在如C這樣的語言中,通過提供一個簡單的選取、執行函數的方法,函數指針可以簡化代碼。
函數指針只能指向具有特定特徵的函數。因而所有被同一指針運用的函數必須具有相同的參數和返回類型。 [1] 

delegate通用語言運行庫

通用語言運行平台Common Language Runtime,簡稱CLR)是微軟為他們的.NET虛擬機所選用的名稱。它是微軟對通用語言架構(CLI)的實現版本,它定義了一個代碼運行的環境。CLR運行一種稱為通用中間語言字節碼,這個是微軟的通用中間語言實現版本。
CLR運行在微軟的視窗操作系統上。查看通用語言架構可以找到該規格的實現版本列表。其中有一些版本是運行在非Windows的操作系統中。 [2] 
參考資料
  • 1.    Mössenböck, Hanspeter (2002-03-25). "Advanced C#: Variable Number of Parameters". Institut für Systemsoftware, Johannes Kepler Universität Linz, Fachbereich Informatik. p. 25. Retrieved 2011-08-04.
  • 2.    Sturm, Oliver (2005-09-01). "Delegate calls vastly sped up in .NET 2". Retrieved 2007-09-09.