程序对象如何改变_self?

lok*_*oki 1 delphi self

我有

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 ?

Rem*_*eau 5

我还没有完全理解 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)