Class helpers
Adam Boduch
Innowacją wprowadzoną w Delphi 8 jest mechanizm class helpers, umożliwiający rozszerzenie funkcjonalności danej klasy bez konieczności dziedziczenia po niej, czy też wprowadzania jakiejkolwiek zmiany w jej kodzie.
Mechanizm class helpers dostępny jest tylko w Delphi dla .NET
Mechanizm class helpers charakteryzuje się specyficzną konstrukcją:
type
TFiat = class
KM : Integer;
end;
TFiatHelper = class helper for TFiat
procedure Jedź;
end;
Przykład ten prezentuje utworzenie klasy TFiatHelper
, która prezentuje właśnie mechanizm class helpers, czyli rozszerzenie funkcjonalności klasy TFiat
. Oto schemat budowy takiej klasy:
NazwaKlasy = class helpers for KlasaBazowa;
end;
W miejscu [KlasaBazowa]
należy wstawić nazwę klasy, której funkcjonalność ma zostać rozszerzona. Same dodawanie metod i właściwości odbywa się w ten sam sposób co w zwykłej klasie. Spójrzmy na procedurę Jedź
z klasy TFiatHelper
:
procedure TFiatHelper.Jedź;
begin
KM := 25;
MessageBox.Show(Convert.ToString(KM));
end;
Warto zwrócić uwagę, że możemy się bez problemu odwołać do właściwości znajdującej się w klasie TFiat
(właściwość KM
).
Dzięki class helpers można odwołać się do metody Jedź
(która znajduje się w klasie TFiatHelper
) z klasy TFiat
:
var
Fiat : TFiat;
begin
Fiat := TFiat.Create;
Fiat.Jedź;
end;
Z pozoru dla class helpers nieistotne są sekcje klasy bazowej. Przykładowo, jeżeli zmienna KM znajdzie się w sekcji Strict private, to i tak program zostanie skompilowany, lecz w trakcie działania taki kod spowoduje pojawienie się błędu. Podsumowując, metody i pola w klasie bazowej nie mogą znajdować się w sekcji Strict private oraz Strict protected, jeżeli class helpers ma mieć do nich dostęp.
Klasy typu class helpers mogą zawierać sekcje Private/Public/Protected, Konstruktory, metody wirtualne oraz dynamiczne, a także zmienne wskazujące na dany obiekt.
Zobacz też:
Czy w Delphi 2005 oraz 2006 mozna uzywac tego mechanizmu w Delphi dla Win32?