Geht deshalb nicht, weil der Constructor von TPersistent nicht virtual ist und damit nicht in der
VMT steht. Folgendes geht :
Delphi-Quellcode:
Type
TTest = class;
TTestClass = class of TTest;
TTest = class (TPersistent)
class function CreateInstanze(aClass : TTestClass) : TTest;
constructor Create; virtual;abstract;
end;
TAbgeleitet = class(TTest)
constructor Create; override;
end;
{ TTest }
class function TTest.CreateInstanze ( AClass: TTestClass) : TTest;
begin
Result := aClass.Create;
end;
{ TAbgeleitet }
constructor TAbgeleitet.Create;
begin
Beep;
end;
procedure TForm1.btnClick(Sender: TObject);
var
lClass : TTest;
begin
lClass := TTest.CreateInstanze(TAbgeleitet);
end;
Der Konstructor von TAbgeleitet wird aufgerufen.
Die Verwendung von GetClass ist hierbei nicht nötig, weil bei einem Klassenreferenztypen gleich der Pointer auf die
VMT mitgegeben wird und nicht erst alle
VMT's durchsucht werden müssen ( Performance )