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; |