У меня есть
Type
TProcOfObject = Procedure of Object;
var
MyProc: TProcOfObject;
теперь, если я сделаю
MyProc := MyObject.MyProc
тогда когда я вызову MyProc, self будет равно MyObject (я пока не до конца понимаю, где self хранится в MyProc). Это способ вызвать myProc с другим значением, чем MyObject for Self?
Связано : Как хранить разные указатели методов в одном контейнере в delphi?
Связано : Существует ли базовый тип для указателей на методы?
I do not yet fully understand where self is stored in MyProc
Указатель метода представлен записью TMethod
, которая содержит в качестве членов 2 указателя — Data
указывает на объект Self
, а Code
указывает на начало кода метода.
Когда указатель метода вызывается как функция во время компиляции, компилятор выводит codegen, который выполняет передачу Code
в Data
в качестве параметра Self
.
Is their a way to call myProc with another value than MyObject for Self ?
Вы можете ввести указатель метода на TMethod
, чтобы получить доступ к его внутренним указателям, например:
var
MyProc: TProcOfObject;
...
TMethod(MyProc).Data := ...; // whatever value you want Self to be
TMethod(MyProc).Code := ...; // whatever function you want to call
...
MyProc();
Связано : Передача кода метода в качестве аргумента типобезопасным способом