type

  TMyClass = class of TMyObject;

  TMyObject = class

    procedure InstanceMethod; //Self = TMyObject, can be virtual

    class procedure ClassMethod; //Self = TMyClass, can be virtual

    class procedure StaticClassMethod; static; //no Self, really just a global 
procedure in a scoped namespace

  end;

 

var

  o: TMyObject;

  c: TMyClass;

begin

  o.InstanceMethod; //if virtual, calls resolved based on actual class

  o.ClassMethod; //if virtual calls, resolved based on actual class

  o.StaticCalssMethod; //can’t be virtual, resolved on variable type

 

  TMyObject.ClassMethod; //call resolved based on given type

  TMyObject.StaticClassMethod; //call resolved based on given type

 

  c.ClassMethod; //if virtual, calls resolved based on actual class

  //haven’t tried if this one works, I assume it does:

  c.StaticClassMethod; //can’t be virtual, resolved on variable type

end;

 

From: fpc-devel <fpc-devel-boun...@lists.freepascal.org> On Behalf Of J. Gareth 
Moreton
Sent: Sunday, 29 July 2018 07:22
To: FPC developers' list <fpc-devel@lists.freepascal.org>
Subject: Re: [fpc-devel] Compile time functions

 

Aah, right.  Class methods I have used in past projects, but my understanding 
is that, in these instances, Self can still be accessed, but represents the 
class rather than the object, can be called without an instantiated object, and 
still have the issues that they can be virtual and overridden (something i'm 
disallowing with pure functions because of the initial complexity of 
determining which version of a method to call).

Can you clarify, Sven, with "static" and "class"?

 

Gareth aka. Kit


On Sat 28/07/18 23:11 , "Dmitry Boyarintsev" skalogryz.li...@gmail.com 
<mailto:skalogryz.li...@gmail.com>  sent:

These are known as “class” methods (rather than “static”) in object pascal.

 

Thanks,

Dmitry

On Saturday, July 28, 2018, J. Gareth Moreton <gar...@moreton-family.com 
<javascript:top.opencompose('gar...@moreton-family.com','','','')> > wrote:

Aah, right.

 

I'm probably being rather dumb here from not having used them before, but do 
you mean things like this?

type
  TNewClass = class

    function Special: Boolean; static;

end;


I gather you can't access Self in such methods.

Gareth aka. Kit


On Sat 28/07/18 20:37 , "Sven Barth" pascaldra...@googlemail.com 
<javascript:top.opencompose('pascaldra...@googlemail.com','','','')>  sent:

J. Gareth Moreton <gar...@moreton-family.com <mailto:gar...@moreton-family.com> 
> schrieb am Sa., 28. Juli 2018, 19:34:

I did wonder about that, but wasn't sure how it would affect things where 
inheritance is concerned.  I dare ask, do you have an example of a class method 
that you would consider pure?

 

They don't have inheritance. If they have the modifier "static" they really are 
simply scoped functions or procedures. They can even be assigned to non-"of 
object" procedure variables. 

 

Regards, 

Sven

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to