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