Die Ursache ist wohl einfach nur, daß solche Klasseneigenschaften, aus irgendwelchen unerfindlichen Gründen, keine "Vererbung" unterstützen.
Darum auch nur direkte Klassenvariablen oder
statische Klassenmethoden.
Also im Grunde hatte dir doch die Fehlermeldung ja genau gesagt, was somit nötig wäre.
Die Aufrufkonventionen zwischen eine Klassenmethode und einer statischen Klassenmethode sind halt ein bissl unterschiedlich.
Denn
statische Klassenmethoden besitzen kein
Self.
Bei den sonstigen Methoden wird über Self der Klassentyp mitgegeben, über welchen die Methode aufgerufen wurde.
(bei "normalen" Methoden steckt in Self natürlich die Objekt-Instanz)
Delphi-Quellcode:
TForm1 = class(TForm)
class procedure ClassMethod(i: Integer);
class procedure StaticClassMethod(i: Integer); static;
class procedure VirtualClassMethod(i: Integer); virtual;
end;
ClassMethod(123);
StaticClassMethod(456);
VirtualClassMethod(789);
Unit1.pas.37: ClassMethod(123);
004A0ECF BA7B000000 mov edx,$0000007b
004A0ED4 8B03 mov eax,[ebx]
004A0ED6 E8E9FFFFFF call TForm1.ClassMethod
Unit1.pas.38: StaticClassMethod(456);
004A0EDB B8C8010000 mov eax,$000001c8
004A0EE0 E80F000000 call TForm1.StaticClassMethod
Unit1.pas.39: VirtualClassMethod(789);
004A0EE5 BA15030000 mov edx,$00000315
004A0EEA 8B03 mov eax,[ebx]
004A0EEC FF9018010000 call dword ptr [eax+$00000118]
Delphi-Quellcode:
type
TForm1 = class(TForm)
class procedure ClassMethod(i: Integer);
class procedure StaticClassMethod(i: Integer); static;
end;
TFormX = class(TForm1)
end;
class procedure TForm1.ClassMethod(i: Integer);
begin
ShowMessage(Format('%s %s %d', [Self.ClassName, ClassName, i]));
end;
class procedure TForm1.StaticClassMethod(i: Integer);
begin
ShowMessage(Format('%s %d', [ClassName, i]));
end;
TFormX.ClassMethod(123);
TFormX.StaticClassMethod(456);
// TFormX TFormX 123
// TForm1 456