In 8.2 Callbacks (aka events, aka pointers to functions, aka procedural variables)
at the end of page 70 (in .pdf):
Unfortunately, you need to write ugly @TMyClass(nil).Add instead of just @TMyClass.Add.
That's not true.
It didn't occur to me to use class methods for procedural variable of object namely because I know there is no hidden Self in it (procedure of object means it is a <object_reference, method_address> pair).
To my surprise, your example works! But IMO it shouldn't. May be it works because one can invoke a class method using an instance only to specify indirectly it's class and the actual reference is just ignored?
Back to the statement:
Unfortunately, you need to write ugly @TMyClass(nil).Add instead of just @TMyClass.Add.
I've tried:
And it works (thus your statement is not true).
Only when Add is a normal method, not a class one, then it won't work and it must be written as @TMyClass(nil).Add, i.e. a reference must be specified.
I'm still confused that it is possible to assign Self-less class method to a procedural variable of object.
Lazarus 1.9.0 r64660M FPC 3.1.1 x86_64-linux-gtk2
Edit: Corrections. There is a Self pointer in class methods according to: https://www.freepascal.org/docs-html/ref/refsu28.html and it points to the VMT. But what I've tried still works.
In 8.2 Callbacks (aka events, aka pointers to functions, aka procedural variables)
at the end of page 70 (in .pdf):
That's not true.
It didn't occur to me to use class methods for procedural variable
of objectnamely because I know there isno hiddenSelf in it (procedure of objectmeans it is a <object_reference, method_address> pair).To my surprise, your example works! But IMO it shouldn't. May be it works because one can invoke a class method using an instance only to specify indirectly it's class
and the actual reference is just ignored?Back to the statement:
I've tried:
And it works (thus your statement is not true).
Only when
Addis a normal method, not aclassone, then it won't work and it must be written as@TMyClass(nil).Add, i.e. a reference must be specified.I'm still confused that it is possible to assign
Self-lessclass method to a procedural variable of object.Lazarus 1.9.0 r64660M FPC 3.1.1 x86_64-linux-gtk2
Edit: Corrections. There is a Self pointer in class methods according to: https://www.freepascal.org/docs-html/ref/refsu28.html and it points to the VMT. But what I've tried still works.