Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Warum braucht Class Property einen Static-Getter?

  Alt 21. Mai 2014, 14:09
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.
$2B or not $2B

Geändert von himitsu (21. Mai 2014 um 14:14 Uhr)
  Mit Zitat antworten Zitat