Добавить комментарий

Delphi

Хелперы в Delphi

Механизм помощников позволяет добавлять к классу метод, не создавая потомка.
Создав расширение:

TFieldHelper = class helper for TField
public
  function HasChanged: boolean;
end;

мы получаем возможность использовать field.HasChanged, не создавая наследников и не меняя унаследованный код, который может продолжать работать с объектами типа TField.

 Хелпер можно создать не только для класса, но и для записи:

TRectHelper = record helper for TRect
  function ContainsPoint( Point: TPoint ): boolean;
end;

function TRectHelper.ContainsPoint( Point: TPoint ): boolean;
begin
  result := (Point.X > Self.Left) and // Self - обращение к экземпляру класса, который мы расширяем
   (Point.X < Self.Left + Self.Width) and
   (Point.Y > Self.Top) and
   (Point.Y < Self.Top + Self.Height);
end;

Хэлперы не поддерживают перегрузку операторов. 

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

Ну и хэлперы позволяют добавлять только методы. Ни каких атрибутов. 

 

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Допустимые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и абзацы переносятся автоматически.
  • Вы можете цитировать другие сообщения, используя тэг [quote]

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и абзацы переносятся автоматически.