Zitat:
Jetzt weiß ich auch endlich, was virtual bedeutet:
na das ist doch scheen
wenn Du jetzt noch Deine Klassen einzig und allein anhand eines normalen Strings des Klassennamen createn willst, dann mach Dir einfach ne kleine Liste mit einem Record String und der Metaklassenvariable, wenn Du dann nach dem Klassennamen suchst, kannst Du Dir die Metaklassenvariable zurückliefern .. jede Klasse muss allerdings vorher in Deiner (zentralen) Liste registriert werden (am besten wohl im initialization der betreffenden
Unit .. oder nimm die in Delphi schon vorhandenen Boardmittel, das würde gehen, wenn Du nicht von TObject, sondern von TPersistent ableitest.
Für diesen Fall schau Dir mal die Funktion GetClass in der
Unit Classes an ...
letztendlich kann dann so ein simpler Aufruf entstehen, und das Object wird dann automatisch mit der richtigen Klasse created ..
Delphi-Quellcode:
TBasis = class(TObject)
public
constructor create; virtual;
class function CreateInstance(aClassName : string) : TBasis;
end;
//==============================================================================
class function TBasis.CreateInstance(aClassName: string): TBasis;
var
aBaseClass : TBaseClassType;
begin
aBaseClass := ....SearchClassTypeName(aClassName); // oder GetClass
if not Assigned(aBaseClass) then begin
Showmessage('Nicht registrierte Klasse: '+ aClassName, 'TBasis.CreateInstance');
aBaseClass:= TBasis;
end;
result := aBaseClass.create;
end;
Aufruf dann mit:
Delphi-Quellcode:
var
aBaseObj : TBasis;
begin
aBaseObj := TBasis.CreateInstance('TAbleitungA');
Showmessage(aBaseObj.classname);
end;
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.