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

C# 委派深度解析(三):內部結構與回調呼叫機制

     編輯:關於C語言

委派物件三大核心欄位

欄位型別說明
_targetSystem.Object封裝靜態方法時為 null;封裝實例方法時參考調用物件(即隱式 this 參數)
_methodPtrSystem.IntPtrCLR 內部整數值,標識要回調的具體方法
_invocationListSystem.Object通常為 null;多播委派時參考委派陣列

建構函式機制

所有委派皆有建構函式 (object target, IntPtr methodPtr)。但原始碼中寫法為:

MyDelegate d = new MyDelegate(TestMethod);

編譯器魔法:C# 編譯器識別此為委派建構,自動解析:

  • 目標物件參考 → 傳給 target 參數(靜態方法傳 null)
  • 方法標識 IntPtr(從 MethodDef/MemberRef 元資料取得) → 傳給 methodPtr

建構函式內部將兩參數存入 _target、_methodPtr,並將 _invocationList = null。

回調呼叫過程


// 原始呼叫代碼
private void Method(MyDelegate aMyDelegate)
{
    if (aMyDelegate != null) aMyDelegate();
}

編譯器轉換:看到 aMyDelegate() → 生成 aMyDelegate.Invoke() 呼叫。

Invoke 內部執行:使用 _target 與 _methodPtr 對指定物件呼叫所需方法。

關鍵結論

每個委派物件實際封裝:一個方法 + 調用該方法時要操作的一個物件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved