dmitry boyarintsev wrote 5 lines
yeah, i've seen description of 'static' usage at the mailing list
(subj: crashing _self parameter)
This is a new feature for FPC, right? (catching up with new delphi
syntax?)
The static keyword been available forever in FPC (probably from before Delphi had it, we first used it in TP-style objects). What is new is making the behaviour of adding of "static" to class methods Delphi- compatible.
a few questions about that:
1) 'static' methods are regular procedures/functions, but bound to a
class rather than a unit?
A class method becomes indeed a regular function/procedure within the scope of a class if you add "static;".
2) it's possible to pass 'static'-methods as procedure variables?
Try it. I don't know. It will probably cause compiler errors because of type incompatibilities. If Delphi accepts it in some form, please file a bug report with a compilable example program. It should probably also be tested that class methods are not assignable to a "procedure of object"-style procvar (although I don't know whether that's normally possible for class methods).
Show quoted text 5 lines
3) only class methods can be 'static'? it's impossible to declare a
method like:
TMyObject = class
procedure MyMethod; static;
end;
It's possible to declare this, but it doesn't change anything currently (a method without self-parameter would be indistinguishable from a class method without its hidden vmt-parameter -- which is also called self, for that matter). I don't see any use for this.
4) no Self parameter is available inside the 'static' method. (since
it's regular procuder or function)
That's the whole point of using static.
5) 'static' keyword is used only if compiler -St switch specified?
Yes, or {$static on)
Show quoted text 5 lines
6) how are they actually named? because there're two kind of static
methods available:
TMyObject = class
class function MyClassProc; // static class method
This is a regular class method.
Show quoted text 5 lines
class function MyClassVirtualProc; virtual; // virtual class
method. can be overriden.
class function MyClassVirtualProc; dynamic; // dynamic class
method. can be overriden too
class function MyClassProc; static; // "static" class method?
And this is a static class method.
7) 'static' keyword is available for both {$mode objfpc} and {$mode
delphi}
It's available in every mode, as long as you add -St or {$static on}
Jonas