让getter返回私有var属性的值

时间:2010-02-01 15:12:07

标签: delphi properties

说我有

type
  TLight = class
  private
    Ftimer : TTimer;
    property IsAutoRotating: Boolean read Ftimer.Enabled;

显然,这不会编译,但为什么不编译以及如何解决这个问题(最好不要将该状态保存在单独的var中。

2 个答案:

答案 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瞧!