[fpc-pascal] Assigning class method to procedure of object via class name in delphi mode
Michalis Kamburelis
michalis.kambi at gmail.com
Mon Jan 25 22:13:59 CET 2010
cobines wrote:
> everything is ok. But I can also assign it using class name:
>
> CM.Callback := TContextMenu.ContextMenuSelect;
>
This is the way it's supposed to work in delphi mode, as far as I
remember Delphi allows it (disclaimer: I don't have Delphi now to check,
but it used to be so around Delphi 7).
This has actually one useful feature: when ContextMenuSelect is a "class
procedure", this is a safe and valid operation (class procedures can be
safely called by only a class reference, that's their point after all).
In objfpc I achieve the same by the unclean trick "CM.Callback :=
TContextMenu(nil).ContextMenuSelect;"
Unfortunately, the way it's implemented in delphi, it also allows this
very unsafe assignment when ContextMenuSelect is a normal (not class)
method.
Michalis
More information about the fpc-pascal
mailing list