Class helpers

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ż:

 
Informacje
Ostatnia modyfikacja 15-05-2006 17:27 Ostatni autor Coldpeer
Ilość wyświetleń 5890 Wersja 2
Komentarz
Adam Boduch dnia 25-01-2006 18:10
Czy w Delphi 2005 oraz 2006 mozna uzywac tego mechanizmu w Delphi dla Win32?

Katalog
Copyright © 2000-2006 by Coyote Group 0.9.3-pre3
Czas generowania strony: 0.0442 sek. (zapytań SQL: 10)