Хелперы в 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;
Хэлперы не поддерживают перегрузку операторов.
Если описать несколько хэлперов для одного класса, будет использоваться только ближайший, что может подарить много весёлых минут отладки при неаккуратном использовании.
Ну и хэлперы позволяют добавлять только методы. Ни каких атрибутов.
Метки: