當我看着反射的Action
代表,我看到它有一個像代表的構造函數和成員函數是在哪裏定義的?
public Action(object @object, IntPtr method);
一個構造函數,但我找不到任何機構一樣與其他成員函數一樣Invoke
,BeginInvoke
等我可以只能看到它的定義。這些功能在哪裏定義?它們是否定義在.net BCL之外?
當我看着反射的Action
代表,我看到它有一個像代表的構造函數和成員函數是在哪裏定義的?
public Action(object @object, IntPtr method);
一個構造函數,但我找不到任何機構一樣與其他成員函數一樣Invoke
,BeginInvoke
等我可以只能看到它的定義。這些功能在哪裏定義?它們是否定義在.net BCL之外?
代表基本上由CLR特別處理。編譯器提供簽名,但CLR知道如何處理它們。
第8.9.3節的ECMA-335這個分區我談話:
委託是面向對象的等價函數指針。與函數指針不同,代表是面向對象的,類型安全的和安全的。通過定義派生自基類型的類來創建代表 System.Delegate(請參閱分區IV)。每個委託類型應提供一個名爲Invoke的方法,其中包含適當的 參數,並且委託的每個實例都將調用轉發給它的Invoke方法,以將一個或多個兼容的 靜態或實例方法轉發給特定對象。代理實例創建時,選擇它委派的對象和方法爲 。
除了實例構造函數和Invoke方法,委託可以有兩個額外的方法:BeginInvoke和EndInvoke。這些用於異步調用。
大多數情況下,代表似乎只是另一種用戶定義的類,它們嚴格控制着 。這些方法的實現由VES而不是用戶代碼提供。可以在委託類型上定義的唯一其他 成員是靜態或實例方法。
(VES是虛擬執行系統; CLR是微軟的落實VES)的
喬恩斯基特來救援!感謝這個有價值的信息。 – 2010-10-05 09:21:12