[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