Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#9

Re: Klasseneigenschaften und ihre Getter (abstrakte Klasse)

  Alt 14. Mai 2007, 09:20
Ü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
  Mit Zitat antworten Zitat