我有
Type
TProcOfObject = Procedure of Object;
var
MyProc: TProcOfObject;
現在如果我這樣做
MyProc := MyObject.MyProc
那么當我呼叫 MyProc 時,self 將等于 MyObject(我還不完全了解 self 在 MyProc 中的存盤位置)。他們是用 MyObject for Self 以外的另一個值呼叫 myProc 的方法嗎?
uj5u.com熱心網友回復:
我還沒有完全理解 self 在 MyProc 中的存盤位置
方法指標由TMethod記錄表示,它包含 2 個作為成員的指標 -Data指向Self物件,并Code指向方法代碼的開頭。
當在編譯時將方法指標作為函式呼叫時,編譯器輸出 codegen 執行作為引數Code傳入的codegen 。DataSelf
他們是用 MyObject for Self 以外的另一個值呼叫 myProc 的方法嗎?
您可以對方法指標進行型別轉換TMethod以訪問其內部指標,例如:
var
MyProc: TProcOfObject;
...
TMethod(MyProc).Data := ...; // whatever value you want Self to be
TMethod(MyProc).Code := ...; // whatever function you want to call
...
MyProc();
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/474103.html
