首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 委派深度解析(四):IL 層面驗證 Invoke 呼叫機制

     編輯:關於C語言

IL 代碼證據

使用 ILDasm.exe 檢視 void Method(MyDelegate aMyDelegate) 的中間語言:

ILDasm 驗證委派 Invoke 呼叫

圖證明:編譯器確實生成對 MyDelegate.Invoke() 的呼叫指令。

原始碼等價轉換

以下兩種寫法編譯後完全相同:


// 寫法 1:隱式呼叫(編譯器自動生成 Invoke)
private void Method(MyDelegate aMyDelegate)
{
    if (aMyDelegate != null) aMyDelegate();
}

// 寫法 2:顯式呼叫 Invoke
private void Method(MyDelegate aMyDelegate)
{
    if (aMyDelegate != null) aMyDelegate.Invoke();
}

Invoke 方法簽名

  • 委派簽名:無參數、回傳 void
  • Invoke 簽名:同樣無參數、回傳 void
  • 內部使用 _target(目標物件)與 _methodPtr(方法指標)執行回調

核心結構回顧

欄位型別用途
_targetobject實例方法的 this 參考;靜態方法為 null
_methodPtrIntPtrCLR 內部方法標識符
_invocationListobject多播委派時的委派陣列參考

總結

委派物件封裝「方法指標」與「目標物件」。呼叫委派實際上是呼叫其 Invoke() 方法,由 CLR 依據內部欄位執行正確的方法。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved