Hallo,
glaube ich stehe gerade etwas auf dem Schlauch!
folgender Code:
Data oldData = new Data();
oldData = data;
data.Source.XmlDataSource = dataEditor.XML;
ich weisse oldData data zu.
wenn ich danach das Objekt data ändere ändert sich auch das Objekt oldData?
Warum denn das?
wie kann ich das verhindern?
Vielen Dank...
Marcus
Hallo MarcusS,
weil Variablen nur Referenzen auf Objekte enthalten. Verhindern kannst du das durch Klonen von Objekten (ICloneable). Oder wenn es sich um Werttypen handlen soll, indem du aus class struct machst.
herbivore
Hallo herbivore,
aber mit Icloneable wird nur eine flache Kopie erstellt!
Wenn jetzt mein zu klonendes Object noch weitere Objekte enthält, dann werden diese Objekte nicht mit geklont sondern wieder nur eine Referenz übergeben.
Müssen die weiteren Objekte dann auch das Interface ICloneable implementieren?
MarcusS
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Original von Borg
Dann implementiere doch dein eigenes Deep-Clone.
einfachste (wenn auch nicht performanteste) möglichkeit komplett deep zu klonen:
mit BinaryFormatter serialisieren und deserialisieren => das deserialisierte ist eine komplett neue kopie, auch die referenzen sind kopien der objekte.
loop:
btst #6,$bfe001
bne.s loop
rts
Hallo herbivore,
aber mit Icloneable wird nur eine flache Kopie erstellt!
nein, das stimmt nicht. ICloneable macht keine Vorgaben über die Art (deep, shallow, oder ein Mittelding) der Kopie. Du kannst implementieren, was du brauchst.
herbivore