Здравствуйте уважаемые коллеги!
В данной статье я расскажу немного о помощниках в Delphi и покажу как можно написать своего помощника для типа Integer.
Помощники появились в Delphi XE3 и представляют собой тип, который позволяет расширять существующие классы или типы (или их потомков). Позволяют добавлять новые методы и свойства для классов, без использования наследования, и записей, которые не поддерживают наследования вовсе.
Объявление помощника для класса или типа выглядит следующим образом:
type Имя_помощника = class|record helper for Имя_класса_или_типа private public // Правила видимости идентичный классам или записям // Список свойств и методов end;
ВНИМАНИЕ!: помощники не поддерживают перегрузку операторов!.
Вы можете определить несколько помощников для одного типа, но только один из них (ближайший) будет использоваться.
Пример написания помощника для класса:
type TExample = class procedure ExampleProc; function ExampleFunc: integer; end; *** procedure TExample.ExampleProc; begin ShowMessage(Self.ClassName); end; function TExample.ExampleFunc: Integer; begin Result := -1; end; *** type TExampleClassHelper = class helper for TExample procedure ShowClassName; function ExampleFunc: Integer; end; *** procedure TExampleClassHelper.ShowClassName; begin ShowMessage('Имя класса: '+Self.CalssName); // Ключевое имя Self в данном случае будет указывать на класс TExample end; function TExampleClassHelper.ExampleFunc: Integer; begin Result := 1; end; *** var Ex: TExample; begin Ex := TExample.Create; Ex.ExampleProc; // Вызовет метод ExampleProc класса TExample. // Выведет сообщение: "TExample". Ex.ShowClassName; // Вызовет метод ShowClassName помощника TExampleClassHelper. // Выведет сообщение: "Имя класса: TExample". Ex.MyFunc; // Вызовет метод ExampleFunc помощника TExampleClassHelper. Вернет 1. end;
Давайте попробуем написать помощника для типа Integer, в котором реализуем методы:
Inc(const Value: integer = 1) — прибавить указанное число Value к текущему числу. По умолчанию — 1.
Dec(const Value: integer = 1) — вычтит указанное число Value из текущего числа. По умолчанию — 1.
ToString — Переведет число в строку.
Код помощника:
type TIntegerHelper = record helper for integer procedure Inc(const Value: integer = 1); procedure Dec(const Value: integer = 1); function ToString: string; end; implementation { TIntegerHelper } procedure TIntegerHelper.Dec(const Value: integer); begin Self := Self - Value; end; procedure TIntegerHelper.Inc(const Value: integer); begin Self := Self + Value; end; function TIntegerHelper.ToString: string; begin Result := IntToStr(Self); end;
Теперь попробуем воспользоваться:
var i: integer; begin i := 10; i.Inc; i.Dec(3); ShowMessage(i.ToString); // Выведет сообщение "8". end;
Если у вас появились вопросы — пишите их в комментариях или на почту: info@asd-soft.ru
Всем удачи!
«Помощники появились в Delphi XE3»
С чего бы? у меня XE и они прекрасно себя в ней чувствуют)