10.4 Особенности хелперов простых типов

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

Для простых типов, правила почти такие же, как и для записей, плюс есть некоторые дополнительные требования:

Поддержку хелперов типов необходимо активировать с помощью переключателя режимов работы modeswitch:

{$modeswitch typehelpers}

Это переключатель включен по умолчанию только в режиме Delphi и DelphiUnicode.

В режиме Delphi DelphiUnicode), для более строгой совместимости с Delphi, вместо хелперов типов должны быть использованы хелперы записей.

В режимах ObjFPC и MacPas можно использовать хелперы типов, но должен быть использован modeswitch TypeHelpers.

Следующие типы не поддерживаются:

oВсе типы файлов (Text, file of ...)

oПроцедурные переменные

oЗапрещены типы такие как записи, классы, классы Objective C, классы C++, объекты и интерфейсы. Для классов должны быть использованы хелперы классов. Это означает, что следующий код не скомпилируется:

TTestHelper = type helper for TObject

end;

Однако, все другие простые типы поддерживаются.

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

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

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

Потомок хелпера типа должен иметь тот же тип.

Примеры использования:

{$mode objpas}

{$modeswitch typehelpers}

 

type

  TLongIntHelper = type helper for LongInt

    constructor create(AValue: LongInt);

    class procedure Test; static;

    procedure DoPrint;

  end;

 

constructor TLongIntHelper.create(AValue: LongInt);

begin

  Self:=Avalue;

  DoPrint;

end;

 

class procedure TLongIntHelper.Test;

begin

  Writeln('Тест');

end;

 

procedure TLongIntHelper.DoPrint;

begin

  Writeln('Значение:',Self);

end;

 

var

  i: LongInt;

begin

  I:=123;

  i.Test;

  $12345678.Test;

  LongInt.Test;

  I:=123;

  i.DoPrint;

  $12345678.DoPrint;

end.