Autor Beitrag
Chiyoko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: Fr 03.05.19 09:54 
DeepCopy erzeugt dir eine Instanz einer Klasse und deren Referenzen. Das ist korrekt und bereits getestet, sonst würde ichs nicht schreiben.
Vielleicht ist das Beispiel nur schlecht gewählt.
In diesem Fall wäre die Serialisierung des Objekts wohl geeigneter.

String braucht kein DeepCopy, weswegen ich das als "Ausnahme" ansehe.

Ich war ja selbst mal Anfänger und kenne das Problem. Im Internet wirst du manchmal erschlagen und findest aus diesem Grund keinen eindeutigen Weg.

EDIT:
Ich habe mein Beispiel angepasst. Das hat jetzt nur 2 Nachteile. Einerseits muss die Klasse serialisierbar sein und zum anderen kann es zu Problemen mit abgeleiteten Klassen kommen.

Edit2:
Sorry, du hast Recht. Mein Fehler. Die Deepcopy Funktion erzeugt nur eine Schattenkopie.

Edit3:
Der vollständigkeithalber hier ein Beispiel von Microsoft, was die Implementierung von Clone (ohne Interface) zeigt, wie bereits von Th69 vorgeschlagen wurde. Da ist das Beispiel auch besser als meins. :D
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 03.05.19 14:41 
Zitat:
Leider referenzieren das kopierte und original Objekt im DataGrid immer noch. (Kopie und Original werden beim Editieren geändert)

Dein Konstruktor erstellt eine Kopie. Wenn sich dein anderer Code so verhält als wäre Original und Kopie die gleiche Instanz dann hast du in diesem Code einen Fehler aber nicht in dem hier gezeigten.

Zitat:
@Chiyoko: Ich kann nicht erkennen, daß dein Code eine "Deep Copy" durchführt

Der BinaryFormatter kopiert auch Referenztypen mit nicht nur die Referenzen darauf. Für mich ist das eine deep copy. Das geht sogar soweit das wenn man Events/Delegaten verdrahtet hat die Objekte am Ende des Events/Delegaten ebenfalls mit serialisiert werden.

Das ganze "wie man etwas kopieren könnte" hilft uns (oder besser RobAll) aber überhaupt nicht weiter. Wir wissen gar nicht was für eine Art von Kopie er braucht. Meist braucht man eh etwas das irgendwo dazwischen liegt. Also weder eine flache noch eine tiefe Kopie.

Zitat:
Edit2:
Sorry, du hast Recht. Mein Fehler. Die Deepcopy Funktion erzeugt nur eine Schattenkopie.

Ich verstehe flache oder tiefe Kopie bzw. shallow or deep copy. Aber was ist in dem Kontext eine Schattenkopie :gruebel:
Chiyoko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: Fr 03.05.19 14:53 
user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:

Zitat:
@Chiyoko: Ich kann nicht erkennen, daß dein Code eine "Deep Copy" durchführt

Der BinaryFormatter kopiert auch Referenztypen mit nicht nur die Referenzen darauf. Für mich ist das eine deep copy. Das geht sogar soweit das wenn man Events/Delegaten verdrahtet hat die Objekte am Ende des Events/Delegaten ebenfalls mit serialisiert werden.

Zitat:
Edit2:
Sorry, du hast Recht. Mein Fehler. Die Deepcopy Funktion erzeugt nur eine Schattenkopie.

Ich verstehe flache oder tiefe Kopie bzw. shallow or deep copy. Aber was ist in dem Kontext eine Schattenkopie :gruebel:


Nein, ich hatte da vorher 2 verschiedene Varianten, um eine Kopie einer Instanz zu erstellen.
Eine davon war falsch.

Ja, das heisst Shallow Copy. Aus Gewohnheit schreib ich aber seit jeher "Shadow/Schatten" :D