Dafür bietet Delphi Klassenreferenzen an:
Delphi-Quellcode:
type
TPet = class
constructor Create(const name: string); virtual;
end;
TPetClass = class of TPet;
TDog = class(TPet);
TCat = class(TPet);
TParrot = class(TPet);
function CreateNewPet(petClass: TPetClass; const name: string): TPet;
begin
Result := petClass.Create(name);
end;
...
var
myDog: TDog;
myParrot: TParrot;
begin
myDog := CreateNewPet(TDog, 'Rex') as TDog;
myParrot := CreateNewPet(TParrot, 'Polly') as TParrot;
Wenn das noch dynamischer gehen soll und es Klassen aus unterschiedlichen Vererbungshierarchien mit unterschiedlichen Parametern beim Konstruktor sind, dann bleibt noch die erweiterte
RTTI (ab Delphi 2010).