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)