@mjustin hast recht, in diesem Fall wird es nicht aufgerufen. Ich muß zugeben, dass ich bisher nicht soviel mit Objekten gearbeitet habe. Wenn ich dann absichtlich die TTier Klasse um einen Konstruktor wie folgt erweitere, merke ich, dass dieser abgearbeitet wird. Wäre es dann so in Ordnung?
Delphi-Quellcode:
unit TierFactory;
interface
uses Classes, TierIntf, Dialogs;
type
TTier =
class(TInterfacedPersistent, ITier)
public
constructor Create;
virtual;
abstract;
class function CreateInstance(
Name:
string): TTier;
overload;
procedure GibLaut;
virtual;
abstract;
end;
implementation
{ TTier }
class function TTier.CreateInstance(
Name:
string): TTier;
var
AClass: TPersistentClass;
begin
Result :=
nil;
AClass := GetClass(
Name);
if Assigned(AClass)
then
begin
Result := AClass.NewInstance
as TTier;
Result.Create;
end
else
{ error handle }
end;
end.
Delphi-Quellcode:
unit Hund;
interface
uses Dialogs, Classes, TierFactory;
type
THund =
class(TTier)
public
constructor Create;
override;
procedure GibLaut;
override;
end;
implementation
{ THund }
constructor THund.Create;
begin
inherited;
end;
procedure THund.GibLaut;
begin
inherited;
showmessage('
Ich bin ein '+ Classname);
end;
initialization
RegisterClass(THund);
finalization
UnRegisterClass(THund);
end.