![]() |
Delphi-Version: 5
Eigenes Objekt kopieren
Hallo liebe Delphi-Helfer :)
Ich nutze für mein Projekt verschiedene selbst gebaute Objekte. z. B.:
Code:
Gibt es eine einfache Möglichkeit so ein Objekt 1:1 zu kopieren, ohne das ich Funktionen schreiben um jeden einzelnen Wert zu übergeben?
TAufgabe = class(TObjekt)
private public Projekt: TProjekt; Anforderung: String; VonMitarbeiter: TMitarbeiter; FuerMitarbeiter: TMitarbeiter; Mitarbeitergruppe: TMitarbeitergruppe; Hauptaufgabennummer: Integer; Taetigkeitstyp: TTaetigkeitstyp; Status: TAufgabenstatus; Allgemein: Boolean; Gesehen: Boolean; Prioritaet: Integer; end;
Code:
Als ShowMessage kommt so leider "456 456" raus statt "123 456"
procedure TAufgabeBearbeitenF.FormShow(Sender: TObject);
begin // Aufgabe laden AufgabeAlt := TAufgabe.LoadFromDatabase(Aufgabennummer, PV.Mitarbeiter.Nummer); AufgabeNeu := AufgabeAlt; AufgabeAlt.Version := '123'; AufgabeNeu.Version := '456'; ShowMessage(AufgabeAlt.Version + ' ' + AufgabeNeu.Version); |
AW: Eigenes Objekt kopieren
Ja, über die Methode Assign.
|
AW: Eigenes Objekt kopieren
Diese Objekte beherschen Assign nicht.
Hatte ich schon versucht :( |
AW: Eigenes Objekt kopieren
Zitat:
Zitat:
Delphi-Quellcode:
unterstüzt wird (dafür einfach von
Assign
Delphi-Quellcode:
ableiten), muss man
TPersistent
Delphi-Quellcode:
trotzdem per Hand implementieren, was der TE scheinbar vermeiden möchte.
AssignTo
Eine sowohl performante, als auch 100% zuverlässige generische Möglichkeit habe ich bis heute auch nicht gefunden. Manchmal funktioniert das einfache Kopieren des Speichers (aber nur dann, wenn keine Strings, Objektreferenzen, etc. verwendet werden). Auch möglich wäre es die einzelnen Felder per RTTI zu kopieren. In meinem Falle war das aber auch nicht das gelbe vom Ei. |
AW: Eigenes Objekt kopieren
Zitat:
Zitat:
|
AW: Eigenes Objekt kopieren
Ja, um jeden Wert manuell zu kopieren brauch ich kein Assign.
Hab dann aber unzähliche Zeilen Code ...
Code:
Aufwändig...
Wert := pcObjekt.Wert
|
AW: Eigenes Objekt kopieren
Published Property kann man auch per TWriter und TReader kopieren.
Aber was spricht gegen ein manuelles Überschreiben von AssignTo oder Assign? Das ist schließlich das "Standard"-Vorgehen. (innerhalb des selben Objektes fast egal wo ... von einer Klasse in eine andere, da kommt es drauf an wer von Beiden kopieren soll) Es ist erstmal egal, ob es manuell definiert ist ... der Vorteil ist eine "standardisierte" und zentralisierte Methode und dass das Kopieren darin nur einmal implementiert ist, anstatt überall immer jeden Wert einzeln kopieren zu müssen. Und wenn nicht von TPersistent abgeleitet, dann hindert niemand einen, dass man sich selber eine Assign-Methode implementiert. |
AW: Eigenes Objekt kopieren
Zuallererst musst du dir klar werden ob du eine flache oder tiefe Kopie erwartest. Sprich: Wenn du eine Kopie von
Delphi-Quellcode:
erstellst - Ist der darin enthaltene
TAufgabe
Delphi-Quellcode:
eine Referenz auf die gleiche Instanz wie im Original oder ein komplett neuer
VonMitarbeiter
Delphi-Quellcode:
?
TMitarbeiter
![]() Nachdem du wahrscheinlich zum Schluss kommst dass du eine flache Kopie möchtest kannst du im Internet schauen und enttäuscht feststellen dass Delphi im Standardumfang hier einem (im Gegensatz zu anderen Tools) leider keine Arbeit abnimmt. |
AW: Eigenes Objekt kopieren
Zitat:
|
AW: Eigenes Objekt kopieren
Hätte ich jetzt nicht erwartet, aber du weißt das natürlich besser. Also willst du eine tiefe Kopie.
Hier kann dir Delphi immerhin über Umwege etwas abnehmen indem du dein Objekt erst "serialisiert" und von dieser Serialisierung dann wieder zurück eine neue Instanz erstellst. Das hängt nun aber auch davon ab welche Delphi-Version du benutzt, wenn ich nicht vollkommen falsch liege gibt es das erst ab der Enterprise-Version (nicht Pro). Oder? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz