Laden...

Objekte übergeben...

Erstellt von MarcusS vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.878 Views
M
MarcusS Themenstarter:in
153 Beiträge seit 2007
vor 16 Jahren
Objekte übergeben...

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

49.485 Beiträge seit 2005
vor 16 Jahren

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

M
MarcusS Themenstarter:in
153 Beiträge seit 2007
vor 16 Jahren

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

B
1.529 Beiträge seit 2006
vor 16 Jahren

Dann implementiere doch dein eigenes Deep-Clone.

5.941 Beiträge seit 2005
vor 16 Jahren

Hallo MarcusS

Siehe hierzu auch: ICloneable: Etwas unsauber, nicht?

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

0
767 Beiträge seit 2005
vor 16 Jahren

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

49.485 Beiträge seit 2005
vor 16 Jahren

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