2010-10-05 55 views

回答

4

代表基本上由CLR特別處理。編譯器提供簽名,但CLR知道如何處理它們。

第8.9.3節的ECMA-335這個分區我談話:

委託是面向對象的等價函數指針。與函數指針不同,代表是面向對象的,類型安全的和安全的。通過定義派生自基類型的類來創建代表 System.Delegate(請參閱分區IV)。每個委託類型應提供一個名爲Invoke的方法,其中包含適當的 參數,並且委託的每個實例都將調用轉發給它的Invoke方法,以將一個或多個兼容的 靜態或實例方法轉發給特定對象。代理實例創建時,選擇它委派的對象和方法爲 。

除了實例構造函數和Invoke方法,委託可以有兩個額外的方法:BeginInvoke和EndInvoke。這些用於異步調用。

大多數情況下,代表似乎只是另一種用戶定義的類,它們嚴格控制着 。這些方法的實現由VES而不是用戶代碼提供。可以在委託類型上定義的唯一其他 成員是靜態或實例方法。

(VES是虛擬執行系統; CLR是微軟的落實VES)的

+0

喬恩斯基特來救援!感謝這個有價值的信息。 – 2010-10-05 09:21:12

相關問題