Class-reference

0

w helpie jest cos takiego :
TKlasaX = class of TKlasaY
i zastanawia mnie czy to jest równoznacze takiej deklaracji :
TKlasaX = class(TKlasaY)
a jeśli nie to jaka jest różnica??:>:>
a jeśli tak to po co 2 różne sposoby robienia tego samego?:>:>:>
:-) :-)

0

Oczywiście, że to są dwa różne sposoby.
class-reference to jedynie wskaźnik na "klasę typu..."
Czyli przekazując jako parametr class-reference mówisz kompilatorowi, że ten parametr to jest klasa określonego typu. Przy czym jeżeli to jest klasa pochodna od tego typu to on też przyjmie ją.
Najogólniej mówiąc: class-reference używasz wtedy gdy musisz powiedzieć kompilatorowi, że przekazany zostanie parametr pochodny od danej klasy, ale jeszcze nie znasz go (może wcale nie istnieć jeszcze taka klasa). To takie coś wprowadzone do wygodnego operowania na przyszłych rozszerzeniach.

0

Mały przykład:

type
TKlasa = class
constructor Create; virtual;
end;

TKlasaA = class(TKlasa)
constructor Create; virtual;
end;

TKlasaB = class(TKlasa)
constructor Create; virtual;
end;

function DoIt(Klasa: class of TKlasa): TKlasa;
begin
Result:=Klasa.Create;
end;

DoIt(TKlasa) - zwraca obiekt typu TKlasa
DoIt(TKlasaA) - zwraca obiekt typu TKlasa, będący jednak obiektem TKlasaA
DoIt(TKlasaB) - jw, dotyczy klasy TKlasaB

1 użytkowników online, w tym zalogowanych: 0, gości: 1