Delphi-Quellcode:
a: TMyclass1;
b: TMyclass2;
begin
a := TMyclass1(CreateInstance(TMyclass1));
...
b := Tmyclass2(CreateInstance(Tmyclass2));
// bzw.
a := CreateInstance(TMyclass1) as TMyclass1;
...
b := CreateInstance(Tmyclass2) as Tmyclass2;
Ob nun als String oder Klasse, ist hierbei egal.
PS: Bei der Klassenvariante sollte man den Constructor besser Virtual machen.
oder als typlosen Parameter:
Delphi-Quellcode:
procedure CreateInstance(mcc: TMyClassClass;
out Result);
begin
TMyClass(Result) := mcc.Create(...);
end;
procedure CreateInstance(MyClass:
String;
out Result);
begin
case IndexText(MyClass, ['
TMyClass1', '
TMyClass2'])
of
0: TMyClass(Result) := TMyClass1.Create(...);
1: TMyClass(Result) := TMyClass2.Create(...);
else TMyClass(Result) :=
nil;
// oder eine Exception auslösen
end;
end;