Überlege mal logisch
1.) was soll eine abstrakte Methode für einen Sinn machen wenn man sie nicht als virtual deklarieren kann ? Ergo: abstrakte Methoden sind fast immer virtual und das muß gehen.
2.) eine Klassenmethode greift auf die Klasse zu, dh. es gibt keine individuelle Instance zu Laufzeit. Das bedeutet das es keine individuellen Felder = Daten zu einer Klasse geben kann und das führt uns zu dem fakt das Properties für eine Klasse keinen Sinn machen.
Properties sind systembedingt eine Schnittstelle die immer auf einer Instance einer Klasse zugreifen und niemals direkt nur auf die Klasse ansich.
Lösung könnte so aussehen
Delphi-Quellcode:
type
TXYZ = class
private
function GetClassNameProp: String;
public
class function GetClassName: String; virtual; abstract;
published
property ClassName: String read GetClassNameProp;
end;
function TXYZ.GetClassNameProp: String;
begin
Result := GetClassName;
end;
Wie gesagt, um auf die Property .ClassName zugreifen zu können musst du vorher eine Instance, also ein Objekt, vom Typ TXYZ allozoiert haben. Erst danach kannst du auf .ClassName zugreifen. In diesem Moment benötigt man keine Klassenmethoden mehr.
Mit der Klassenmethode .GetClassName kannst du aber OHNE Allokation einer Objectinstance auf die Klasse ansich zugreifen, also so -> TXYZ.GetClassName.
Beide Problem die du hast sind also absolut logisch herleitbar und du möchtest eben ein Feature das keinen Sinn macht im Konzept der
VCL-
OOP.
Gruß Hagen