Procedure of object如何改变_self?

Procedure of object how to change the _self?

我有

Type
  TProcOfObject = Procedure of Object;

var 
  MyProc: TProcOfObject;

现在如果我这样做

MyProc := MyObject.MyProc

那么当我调用 MyProc 时,self 将等于 MyObject(我还不完全了解 self 在 MyProc 中的存储位置)。他们是用不同于 MyObject for Self 的另一个值调用 myProc 的方法吗?

I do not yet fully understand where self is stored in MyProc

一个方法指针由TMethod记录表示,它包含2个指针作为成员——Data指向Self对象,Code指向方法代码的开头。

当在 compile-time 处将方法指针作为函数调用时,编译器输出执行 Code 的代码生成,传入 Data 作为 Self 参数。

Is their a way to call myProc with another value than MyObject for Self ?

您可以type-cast指向TMethod的方法指针来访问其内部指针,例如:

var 
  MyProc: TProcOfObject;

...

TMethod(MyProc).Data := ...; // whatever value you want Self to be
TMethod(MyProc).Code := ...; // whatever function you want to call

...

MyProc();