我已经定义了一个基类和一些派生类,它们永远不会被实例化。它们只包含类函数和两个类属性。
问题是 Delphi 要求类属性的属性 get 方法用static关键字 en 声明,因此不能声明为virtual,所以我可以在派生类中覆盖它。
所以这段代码会导致编译错误:
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;