说我有
type
TLight = class
private
Ftimer : TTimer;
property IsAutoRotating: Boolean read Ftimer.Enabled;
显然,这不会编译,但为什么不编译以及如何解决这个问题(最好不要将该状态保存在单独的var中。
答案 0 :(得分:5)
您的代码将无法编译,因为属性读取和写入说明符必须引用该类的字段或方法。 Ftimer.Enabled
不是这些。
要实现IsAutoRotating
属性,您需要创建一个getter函数:
type
TLight = class
private
Ftimer : TTimer;
function GetIsAutoRotating: Boolean;
public
property IsAutoRotating: Boolean read GetIsAutoRotating;
end;
function TLight.GetIsAutoRotating : Boolean;
begin
Result := Ftimer.Enabled;
end;
答案 1 :(得分:3)
属性的getter和setter应该是类的方法或它的父级 - 或 - 类的一个字段或它的父级。
由于FTimer.Enabled既不是上述构造也不会起作用。 您可以创建一个getter函数和setter过程,它将返回FTimer(getter)的这个属性并设置FTimer(setter)的这个属性:
型:
property Enabled: Boolean read GetEnabled write SetEnabled;
现在按CTRL-SHIFT-C完成课程。现在为您创建了两种方法。
在getter类型中:
Result := FTimer.Enabled;
在setter类型中:
FTimer.Enabled := Value;
Et瞧!