Einzelnen Beitrag anzeigen

Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#12

Re: Zu unbekanntem Klassenderivat casten?

  Alt 17. Mär 2009, 02:04
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.
  Mit Zitat antworten Zitat