程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 委托揭秘(4)

委托揭秘(4)

編輯:關於C語言

為了驗證編譯器生成代碼來調用委托的 Invoke 方法,我們可以用 ILDasm.exe 來檢查為 void Method(MyDelegate aMyDelegate) 方法創建的IL代碼。圖1-2 展示了 void Method(MyDelegate aMyDelegate) 方法的中間語言(intermediate language,IL)代碼。

圖1-2 ILDasm.exe 證明編譯器生成了對 MyDelegate 委托類型的 Invoke 方法的調用

事實上,我們可以修改 void Method(MyDelegate aMyDelegate) 方法來顯示調用 Invoke,如下所以:

private void Method(MyDelegate aMyDelegate)
{
 if (aMyDelegate != null)
 {
  aMyDelegate.Invoke();
 }
}

我們還記得編譯器在定義 MyDelegate 類的時候定義 Invoke 的。所以在調用 Invoke 的時候,它使用的是 private _target 和 _methodPtr 字段來對指定對象調用所需的方法。注意,Invoke 方法的簽名匹配委托的簽名,因為 MyDelegate 委托是一個無參數並返回類型為 void,Invoke 方法(如編譯器生成的那樣)也是一個無參數並返回 void。

End.

-
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved