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