Jump to content
pyscripter

Virtual class methods and properties

Recommended Posts

The following will not compile (error: class property accessor can be a class field or a static class method) :

 

  TTest = class
  private
    class function GetName: string; virtual; abstract;
  public
    class property Name: string read GetName;
  end;

 

whilst the following does:

 

  TTest = class
  private
    class function GetName: string; virtual; abstract;
  public
    property Name: string read GetName;
  end;

 

My question is that since you can have virtual class methods, why not properties that behave accordingly? 

 

In SmallTalk, the first object oriented language, you have a distinction between:

  • instance variables (aka properties)
  • class variables (aka class properties - one per class including subclasses)
  • class instance variables  (one per class, subclasses can change the value)

Share this post


Link to post

Class property Getter/Setters must be static, however delphi doesn't allow virtual abstract static methods. I don't see a good reason for this, so it's likely technical or an oversight. 

 

  • Thanks 1

Share this post


Link to post
46 minutes ago, Vincent Parrett said:

I don't see a good reason for this

Static class methods miss the implicit Self parameter, which holds the current type called. They are quite similar to global procedures/functions and therefore they cannot be virtual - there is just no VMT available. It is the same reason why static class methods cannot call virtual methods.

  • Like 2
  • Thanks 1

Share this post


Link to post

@Uwe Raabe Sure but why can't you have a class property that has virtual class method accessor.  It is just "syntactic sugar".  You call the virtual class method to get the value.

Edited by pyscripter

Share this post


Link to post

The "why" is probably caused by a specific decision taken a long time ago. The people having taken it are most likely no longer at Embarcadero, so we might not even ask them about it..

 

Fortunately the "why" is almost irrelevant, as you can issue a feature request for a change.

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×