Nicht Static-Methoden kennen ihren Nachfahren.
Ein Property ist doch eigentlich nur ein "Alias" für den Getter, also sollte das doch mit dem Static eigentlich nichts zu tun haben
Self ist ein unsichtbarer Parameter, der als erstes in der Parameterliste drinsteht.
Nur bei Static gibt es diesen Parameter nicht. Das sieht intern wie eine "normale" Funktion, so als wäre sie nicht in einer Klasse drin.
Delphi-Quellcode:
type
TMyClass = class
function Method: string;
class function ClassMethod: string;
class function StaticMethod: string; static;
end;
TOtherClass = class(TMyClass);
end;
function TMyClass.Method: string;
begin
// Self = die Instanz (TObject)
// ClassType = TMyClass oder TOtherClass
Result := ClassName; // MyClassType={Self.}ClassType / MyClassType=Self.ClassType
end;
class function TMyClass.ClassMethod: string;
begin
// Self = der Klassentyp (TClass)
// ClassType = TMyClass oder TOtherClass
Result := ClassName; // MyClassType=Self
end;
class function TMyClass.StaticMethod: string;
begin
// Self gibt es nicht
// kennt nur sich und nicht den Nachfahren
Result := 'k.A.';
end;
Code:
MyObj.Method TMyClass
OtherObj.Method TOtherClass
TMyClass.Method geht natürlich nicht
TOtherClass.Method geht natürlich nicht
MyObj.ClassMethod TMyClass
OtherObj.ClassMethod TOtherClass
TMyClass.ClassMethod TMyClass
TOtherClass.ClassMethod TOtherClass
MyObj.StaticMethod k.A.
OtherObj.StaticMethod k.A.
TMyClass.StaticMethod k.A.
TOtherClass.StaticMethod k.A.