Einzelnen Beitrag anzeigen

CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

Klasseneigenschaften und ihre Getter (abstrakte Klasse)

  Alt 13. Mai 2007, 13:26
Hi,
ich habe eine Basisklasse TCXXmlConnection, die nur als Basis existieren soll. Sie ist also praktisch komplett abstrakt:
Delphi-Quellcode:
  TCXXmlConnection = class
  private
    fDataURL: string;

  public
    function Prepare: boolean; virtual; abstract;
    function Ready: boolean; virtual; abstract;
    function Close: boolean; virtual; abstract;

    class function RequiredLibInstalled: boolean; virtual; abstract;

    function GetProject(const AProjectID: string): TCXProjectInfo; virtual; abstract;
    function GetVersionsForProject(const AProjectID: string;
      AGetDownloads: boolean = true): TCXVersionArray; virtual; abstract;
    function GetDownloadsForVersion(const AProjectID: string;
      const AVersionID: string): TCXDownloadArray; virtual; abstract;

  published
    property DataURL: string read fDataURL write fDataURL;
  end;
Soweit alles kein Problem. Nun möchte ich aber eine Klasseneigenschaft mit einem Getter hinzufügen. Der Getter wiederum soll virtuell-abstrakt sein.
Delphi-Quellcode:
  TCXXmlConnection = class
  private
    fDataURL: string;

  strict protected
    class function GetLibName: string; virtual; abstract;

  public
    function Prepare: boolean; virtual; abstract;
    function Ready: boolean; virtual; abstract;
    function Close: boolean; virtual; abstract;

    class function RequiredLibInstalled: boolean; virtual; abstract;

    function GetProject(const AProjectID: string): TCXProjectInfo; virtual; abstract;
    function GetVersionsForProject(const AProjectID: string;
      AGetDownloads: boolean = true): TCXVersionArray; virtual; abstract;
    function GetDownloadsForVersion(const AProjectID: string;
      const AVersionID: string): TCXDownloadArray; virtual; abstract;

  published
    property DataURL: string read fDataURL write fDataURL;
    class property LibName: string read GetLibName;
  end;
So bekomme ich erstmal den Fehler, dass GetLibName statisch sein muss. Füge ich aber static; hinzu, bekomme ich den seltsamen Fehler (Bug?)
Zitat:
[Pascal Fehler] CXXmlConnection.pas(14): E2169 Felddefinition nicht erlaubt nach Methoden oder Eigenschaften
David bekommt unter D2005 einen Fehler, der da etwas eindeutiger ist:
Zitat:
STATIC kann nur für nicht-virtuelle Klassenmethoden verwendet werden
Gibt es keine Möglichkeit den Getter einer Klasseneigenschaft virtuell-abstrakt zu machen?

Chris
  Mit Zitat antworten Zitat