Пусть получатель вернет значение свойства частного var - PullRequest
1 голос
/ 01 февраля 2010

Скажите, у меня есть

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

Очевидно, что это не компилируется, но почему бы и как это решить (желательно без сохранения этого состояния в отдельной переменной.

Ответы [ 2 ]

5 голосов
/ 01 февраля 2010

Ваш код не будет компилироваться, потому что спецификаторы чтения и записи свойства должны ссылаться либо на поле, либо на метод класса. Ftimer.Enabled - ни то, ни другое.

Чтобы реализовать свойство IsAutoRotating, вам нужно создать функцию получения:

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;
3 голосов
/ 01 февраля 2010

Получатель и установщик свойства должен быть методом класса или его родителем - или - полем класса или его родителем.

Поскольку FTimer.Enabled - ни то, ни другое, вышеуказанная конструкция не будет работать. Вы можете создать функцию получения и процедуру установки, которая будет возвращать это свойство FTimer (getter) и устанавливать это свойство FTimer (setter):

Тип:

property Enabled: Boolean read GetEnabled write SetEnabled;

теперь нажмите CTRL-SHIFT-C для завершения класса. 2 метода теперь созданы для вас.

В типе получателя:

Result := FTimer.Enabled;

В наборе типа:

FTimer.Enabled := Value;

эт вуаля!

.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...