10.2 Ограничения для классов хелперов

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

Не все методы или свойства класса могут быть расширены с помощью хелперов. Есть некоторые ограничения на возможности:

Деструкторы или деструкторы классов не допускаются.

Конструкторы классов не допускаются.

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

Не допускается определения полей. Как и полей классов.

Свойства, ссылающиеся на поле не допускаются. На самом деле это является следствием предыдущего пункта.

Абстрактные методы не допускаются.

Виртуальные методы класса не могут быть перекрыты (overridden). Можно их скрыть дав им то же имя или можно их перегрузить с помощью директивы overload.

При перегрузке методов класса в хелпере классов, в отличие от обычных процедур или методов, должен явно использоваться спецификатор overload . Если перегрузка не используется метод, который расширяется с помощью хелпера, будет скрыт методом хелпера (как для обычных классов).

Ниже показано как в предыдущем примере выполнена модификация метода ToString с помощью его перегрузки:

TObjectHelper = class helper for TObject

  function ToString(const aFormat: String): String; overload;

end;

 

function TObjectHelper.ToString(const aFormat: String): String;

begin

  Result := Format(aFormat, [ToString]);

end;

 

var

  o: TObject;

begin

  Writeln(o.ToString('Название объекта %s'));

end.