program helpers;
uses classes, sysutils;
type
TObjectHelper = class helper for TObject
public
procedure AfterConstruction; overload;{inherited wouldn't call it}
procedure BeforeDestruction; {overload; inherited would call it}
end;
type
TObject2=class
constructor create;
destructor destroy;override;
end;
constructor Tobject2.create;
begin
{do things}
writeln ('tobject2 create init');
inherited afterconstruction; {do nothing}
self.afterconstruction; {do nothing}
writeln ('tobject2 create end');
end;
destructor Tobject2.destroy;
begin
writeln ('tobject2 destructor init');
inherited beforedestruction;
self.beforedestruction; {}
writeln ('tobject2 destructor end');
{do things}
end;
procedure TObjectHelper.AfterConstruction;
begin
writeln ('Buid TObject:',self.classname);
end;
procedure TObjectHelper.BeforeDestruction;
begin
writeln ('Destroyed TObject:',self.classname);
end;
type
TDescendant= class (Tobject2)
public
constructor create;
destructor destroy; override;
procedure AfterConstruction;override;
procedure BeforeDestruction;override;
end;
constructor TDescendant.create;
begin
{no inherited to explain TObject create}
end;
destructor TDescendant.destroy;
begin
{same as above}
end;
procedure TDescendant.AfterConstruction;
begin
writeln ('Build:',self.classname);
end;
procedure TDescendant.BeforeDestruction;
begin
writeln ('Destroyed:',self.classname);
end;
type
TDescendant2= class (TDescendant)
end;
var
MyClass: TObject2;
MyDescendant:TDescendant;
MyDescendant2:TDescendant2;
begin
MyClass:=TObject2.Create;
MyDescendant:=TDescendant.Create;
MyDescendant2:=TDescendant2.Create;
writeln;
writeln ('Hi World');
writeln;
FreeAndNil (MyClass);
FreeAndNil (MyDescendant);
FreeAndNil (MyDescendant2);
readln;
end.