AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zu unbekanntem Klassenderivat casten?

Ein Thema von blackdrake · begonnen am 12. Mär 2009 · letzter Beitrag vom 17. Mär 2009
Antwort Antwort
Seite 2 von 2     12   
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#11

Re: Zu unbekanntem Klassenderivat casten?

  Alt 16. Mär 2009, 08:12
Das Object Kopie ist zwar von der selben Klasse wie das Orginal, das Feld Test ist aber leer, bis der Wert 'B' zugewiesen wird.
Bei einer "echten Kopie" sollten aber alle Werte vom Orginal übernommen werden. Das ist die Hauptaufgabe von Clone bzw. in meinem Beispiel Assign.
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

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

Re: Zu unbekanntem Klassenderivat casten?

  Alt 17. Mär 2009, 03: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
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz