我有
Type
TProcOfObject = Procedure of Object;
var
MyProc: TProcOfObject;
Run Code Online (Sandbox Code Playgroud)
现在如果我这样做
MyProc := MyObject.MyProc
Run Code Online (Sandbox Code Playgroud)
那么当我调用 MyProc self 将等于 MyObject (我还没有完全理解 self 存储在 MyProc 中的位置)。他们是否可以使用除 MyObject for Self 以外的其他值来调用 myProc ?
我还没有完全理解 self 存储在 MyProc 中的位置
方法指针由TMethod
记录表示,其中包含2个指针作为成员——Data
指向Self
对象,并Code
指向方法代码的开头。
当方法指针在编译时作为函数调用时,编译器会输出 codegen,该代码生成执行Code
作为Data
参数传入的操作Self
。
他们是否可以使用除 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();
Run Code Online (Sandbox Code Playgroud)