基本クラスといくつかの派生クラスを定義しましたが、インスタンス化されることはありません。これらには、クラス関数と2つのクラスプロパティのみが含まれています。
問題は、Delphiがクラスプロパティのプロパティgetメソッドを静的キーワードenで宣言することを要求しているため、仮想として宣言できないため、派生クラスでオーバーライドできることです。
したがって、このコードはコンパイルエラーになります。
TQuantity = class(TObject)
protected
class function GetID: string; virtual; //Error: [DCC Error] E2355 Class property accessor must be a class field or class static method
class function GetName: string; virtual;
public
class property ID: string read GetID;
class property Name: string read GetName;
end;
TQuantitySpeed = class(TQuantity)
protected
class function GetID: string; override;
class function GetName: string; override;
end;
したがって、問題は次のとおりです。派生クラスで結果の値をオーバーライドできるクラスプロパティをどのように定義しますか?
Delphi XE2、Update4を使用します。
更新: プロパティの代わりに関数を使用してDavid Heffernanの提案で解決しました:
TQuantity = class(TObject)
public
class function ID: string; virtual;
class function Name: string; virtual;
end;
TQuantitySpeed = class(TQuantity)
protected
class function ID: string; override;
class function Name: string; override;
end;