Dabei einmal mit explizitem Typecast und einmal ohne.
Bei der Verwendung ohne den Typecast wird zwar die korrekte Klasse erzeugt, aber deren Constructor nicht aufgerufen.
Soll das so sein und wenn ja - wieso?
Das Problem ist, daß imn zweiten Fall nur TObject.Create aufgerufen wird und damit fList = nil ist.
Code: Alles auswählen
program Project1;
uses classes;
type
{ TBase }
TBase = class ( TList )
private
fName : string;
public
constructor Create; virtual;
function GetCopy1 : TBase;
function GetCopy2 : TBase;
property Name : string read fName;
end;
TBaseClass = class of TBase;
{ TBase }
constructor TBase.Create;
begin
inherited Create;
fName := 'TBase';
end;
function TBase.GetCopy1: TBase;
begin
Result := TBase(TBaseClass(classType).Create);
end;
function TBase.GetCopy2: TBase;
begin
Result := TBase(classType.Create);
end;
var a, b, c : TBase;
begin
a := TBase.Create;
b := a.GetCopy1;
c := a.GetCopy2;
writeln('a: ', a.Name + ' (' + a.Classname + ')');
writeln('b: ', b.Name + ' (' + b.Classname + ')');
writeln('c: ', c.Name + ' (' + c.Classname + ')');
ReadLn;
end.
Code: Alles auswählen
a: TBase (TBase)
b: TBase (TBase)
c: (TBase)