10.3 Ограничения на хелперы записей

На верх  Назад  Вперёд

Записи не предлагают те же возможности, что и классы. Это отражается на возможностях при создании хелперов для записей. Список ограничений на хелперы записей таков:

Хелпер записей не может быть использован для расширения классов. Следующий код не скомпилируется:

TTestHelper = record helper for TObject

end;

Внутри объявления хелпера, методы и поля расширенной записи для определениях свойств, недоступны. Но в реализации они, конечно, доступны. Это означает, что следующий код не будет компилироваться:

TTest = record

   Test: Integer;

end;

 

TTestHelper = record helper for TTest

   property AccessTest: Integer read Test;

end;

Хелперы записей могут получить доступ только к общедоступным (public) полям (в случае использования расширенных записей со спецификаторами видимости).

Наследование хелперов записей допускается только в режиме ObjFPC; В режиме Delphi, не допускается.

Хелперы записей наследуются только от других хелперов записей, а не от хелперов классов.

В отличие от хелперов классов, потомок хелпера записи должен расширять один и тот же тип записей.

В режиме Delphi, нельзя вызвать родительский (inherited) метод расширенной записи. Однако в режиме ObjFPC это сделать можно. Следующему коду для компиляции необходим режим ObjFPC:

type

  TTest = record

    function Test(aRecurse: Boolean): Integer;

  end;

 

  TTestHelper = record helper for TTest

    function Test(aRecurse: Boolean): Integer;

  end;

 

function TTest.Test(aRecurse: Boolean): Integer;

begin

  Result := 1;

end;

 

function TTestHelper.Test(aRecurse: Boolean): Integer;

begin

  if aRecurse then

    Result := inherited Test(False)

  else

    Result := 2;

end;