AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Eigenes Objekt kopieren

Ein Thema von Jakane · begonnen am 26. Feb 2018 · letzter Beitrag vom 26. Feb 2018
Antwort Antwort
Jakane

Registriert seit: 1. Jun 2012
13 Beiträge
 
#1

Eigenes Objekt kopieren

  Alt 26. Feb 2018, 12:37
Delphi-Version: 5
Hallo liebe Delphi-Helfer

Ich nutze für mein Projekt verschiedene selbst gebaute Objekte.
z. B.:
Code:
  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;
Gibt es eine einfache Möglichkeit so ein Objekt 1:1 zu kopieren, ohne das ich Funktionen schreiben um jeden einzelnen Wert zu übergeben?
Code:
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);
Als ShowMessage kommt so leider "456 456" raus statt "123 456"
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
38.962 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Eigenes Objekt kopieren

  Alt 26. Feb 2018, 12:43
Ja, über die Methode Assign.
Markus Kinzler
  Mit Zitat antworten Zitat
Jakane

Registriert seit: 1. Jun 2012
13 Beiträge
 
#3

AW: Eigenes Objekt kopieren

  Alt 26. Feb 2018, 12:44
Diese Objekte beherschen Assign nicht.
Hatte ich schon versucht
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.595 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: Eigenes Objekt kopieren

  Alt 26. Feb 2018, 12:45
Gibt es eine einfache Möglichkeit so ein Objekt 1:1 zu kopieren, ohne das ich Funktionen schreiben um jeden einzelnen Wert zu übergeben?
Ja, über die Methode Assign.
Selbst wenn Assign unterstüzt wird (dafür einfach von TPersistent ableiten), muss man AssignTo trotzdem per Hand implementieren, was der TE scheinbar vermeiden möchte.

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.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (26. Feb 2018 um 12:48 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
38.962 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: Eigenes Objekt kopieren

  Alt 26. Feb 2018, 12:50
Zitat:
Selbst wenn Assign unterstüzt wird (dafür einfach von TPersistent ableiten), muss man AssignTo trotzdem per Hand implementieren, was der TE scheinbar vermeiden möchte.
Zitat:
Gibt es eine einfache Möglichkeit so ein Objekt 1:1 zu kopieren, ohne das ich Funktionen schreiben um jeden einzelnen Wert zu übergeben?
Es muss ja nicht jeder einzelne Wert übergeben werden. Man muss der Klasse natürliche eine individuell implementierte Methode verpassen.
Markus Kinzler
  Mit Zitat antworten Zitat
Jakane

Registriert seit: 1. Jun 2012
13 Beiträge
 
#6

AW: Eigenes Objekt kopieren

  Alt 26. Feb 2018, 12:51
Ja, um jeden Wert manuell zu kopieren brauch ich kein Assign.
Hab dann aber unzähliche Zeilen Code ...

Code:
Wert := pcObjekt.Wert
Aufwändig...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.931 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Eigenes Objekt kopieren

  Alt 26. Feb 2018, 12:54
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
4.727 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Eigenes Objekt kopieren

  Alt 26. Feb 2018, 12:56
Zuallererst musst du dir klar werden ob du eine flache oder tiefe Kopie erwartest. Sprich: Wenn du eine Kopie von TAufgabe erstellst - Ist der darin enthaltene VonMitarbeiter eine Referenz auf die gleiche Instanz wie im Original oder ein komplett neuer TMitarbeiter ?
https://de.wikipedia.org/wiki/Objektkopie

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.
  Mit Zitat antworten Zitat
Jakane

Registriert seit: 1. Jun 2012
13 Beiträge
 
#9

AW: Eigenes Objekt kopieren

  Alt 26. Feb 2018, 13:35
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.
Leider irrst du dich da, ich will auch das TMitarbeiter kopiert wird.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
4.727 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Eigenes Objekt kopieren

  Alt 26. Feb 2018, 13:41
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?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf