Какова цель `списка предков` в синтаксисе класса 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.
Это один из способов обойти ограничение, заключающееся в том, что в любом конкретном месте кода может быть только один активный помощник.
Насколько я могу судить, документации для списка предков нет.