Hi zusammen,
ich frage mich, warum das hier so ist, wie es ist
Ich hatte mich in meinem Hauptprojekt gewundert, warum die Konstruktoren meiner abgeleiteten Klassen ignoriert wurden.
Mein Problem habe ich dann in eine Konsolenanwendung ausgelagert und erhalte dort folgendes Phänomen
Die Ausgabe meiner Konsolenanwendung
Code:
Warum wird bei Test2 und Test3 der Konstruktor von TDerivedClass ignoriert?
Test 1 (funktioniert)
TBaseClass.Create
TDerivedClass.Create
Test 2 (funktioniert nicht)
TBaseClass.Create
Test 3 (funktioniert nicht)
TBaseClass.Create
Der Sourecode meiner Konsolenanwendung
Code:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
type
TBaseClass = class
public
constructor Create;
end;
TDerivedClass = class(TBaseClass)
public
constructor Create;
end;
TClassType = type of TBaseClass;
constructor TBaseClass.Create;
begin
Writeln('TBaseClass.Create');
end;
constructor TDerivedClass.Create;
begin
inherited;
Writeln('TDerivedClass.Create');
end;
procedure Test1;
begin
Writeln('Test 1 (funktioniert)');
var ClassType := TDerivedClass;
var Obj := ClassType.Create;
Writeln('');
end;
procedure Test2;
begin
Writeln('Test 2 (funktioniert nicht)');
var ClassType: TClassType := TDerivedClass;
var Obj: TBaseClass := ClassType.Create;
Writeln('');
end;
procedure Test3;
var
ClassType: TClassType;
Obj: TBaseClass;
begin
Writeln('Test 3 (funktioniert nicht)');
ClassType := TDerivedClass;
Obj := ClassType.Create;
Writeln('');
end;
begin
try
WriteLn('Warum wird bei Test2 und Test3 der Konstruktor von TDerivedClass ignoriert?');
WriteLn('');
Test1;
Test2;
Test3;
Readln;
except
on E:
Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.