Delphi 2010 přináší kromě již uvedených rozšíření jazyka i koncept class constructor (v jiných jazycích nazýván Static nebo Shared), tj. konstruktor specifický pro třídu (neplést s klasickým konstruktor objektu). Tento nový konstruktor je volán pouze jednou (a nebo vůbec - viz. níže) pro každou třídu.
Raději příklad, pak si řekneme ještě více.
program Project1;
{$APPTYPE CONSOLE}
type
TTestConst = class
public
class constructor Create;
class destructor Destroy;
constructor Create;
destructor Destroy; override;
end;
{ TTestConst }
class constructor TTestConst.Create;
begin
writeln('class Create');
end;
constructor TTestConst.Create;
begin
writeln ('klasicky create');
end;
destructor TTestConst.Destroy;
begin
writeln('klasicky destroy');
inherited;
end;
class destructor TTestConst.Destroy;
begin
writeln('Class destroy');
end;
begin
writeln ('begin');
with TTestConst.Create do
begin
try
finally
Free;
end;
end;
with TTestConst.Create do
begin
try
finally
Free;
end;
end;
writeln('end');
end.
Po spuštění se zobrazí:
class Create
begin
klasicky create
klasicky destroy
klasicky create
klasicky destroy
end
Class destroy
Co jsem tím ukázal? Nový konstruktor je volán jen jednou, je volán před začátkem programu nebo před provádění sekce initialization pokud je třída v unitu (a destructor je volán na konci programu nebo po sekci finalization v unitu). Jejich volání postupuje (až na určité malé výjimky) v pořadí jako je initialization unitu, v unitu to je v pořadí jak jsou třídy uvedeny (tedy pokud se na sebe neodkazují - to může být ta výjimka).
Každopádně by mělo být zaručeno, že před počátkem vykonávání sekce initialization jsou provedeno všechny class konstruktory v jednotce. Jediná výjimka může být, že celá třída není použita v programu a je tudíž eliminována linkerem. V tomto případě není ani konstruktor volán.
A zde je i první výhoda proti použití klasické sekce initialization. Pokud totiž není třída linkována, je přesto sekce initialization vykonána - což neplatí o class construktoru.
Druhá výhoda je vylepšení kompatibility s Delphi Prism, který tento konstruktor obsahuje.
Třetí výhoda je takový lepší pocit, že Váš program je zase o kapánek více OOP :-) (prostě lepší zapouzdření).
Poznámky:
Datum: 2010-02-07 20:16:00 Tagy: Delphi 2010, kompilátor