Какова цель `списка предков` в синтаксисе класса helper? Где это задокументировано? Есть ли примеры использования?

Все версии документации, включая самую последнюю, предоставляют следующий синтаксис класса / записи:

type
   identifierName = class|record helper [(ancestor list)] for TypeIdentifierName
     memberList
   end;

И это только объясняет, что...

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

... и не вдаваться в подробности. Примеры использования в остальной части темы документации просто используют тот факт, что ancestor list не является обязательным. Весь код EMBA, который я видел, а также весь сторонний код не использует это ancestor list часть.

Итак, мои вопросы изложены в заголовке:

  • Какова цель ancestor list в синтаксисе помощника класса?
  • Где это задокументировано?
  • Есть ли примеры использования?

1 ответ

Решение

Это позволяет наследовать помощников:

{$APPTYPE CONSOLE}

type
  TObjectHelper = class helper for TObject
    procedure Foo;
  end;

  TObjectHelperAgain = class helper(TObjectHelper) for TObject
    procedure Bar;
  end;

procedure TObjectHelper.Foo;
begin
  Writeln('Foo');
end;

procedure TObjectHelperAgain.Bar;
begin
  Writeln('Bar');
end;

begin
  with TObject.Create do
  begin
    Foo;
    Bar;
  end;
end.

Это один из способов обойти ограничение, заключающееся в том, что в любом конкретном месте кода может быть только один активный помощник.

Насколько я могу судить, документации для списка предков нет.

Другие вопросы по тегам