lukasS
Erfahrenes Mitglied
Hallo,
ich habe ein Problem mit der Copy-Funktion. Die Instanz referenziert sich, trotz der Clone-Funktion.
Ich habe zwei einfache Klassen (c und c1) erstellt. Die eine (c1) hat eine Property vom Typ bool. Die andere Klasse(c) hat ein Array vom Typ c1. (Bsp. siehe unten)
Beide Klasse besitzen eine Clone-Funktion.
Problem ist jetzt, dass das Array im Hauptprogramm nicht kopiert, sondern referenziert wird. So blad ich einen Wert in der Quell-Klasse ändere, ändert sich auch der Wert der neuen Klasse.
Hat vielleicht jemand eine Idee, was ich sonst nach versuchen könnte?
Danke schonmal!
Lukas
Klassen:
ich habe ein Problem mit der Copy-Funktion. Die Instanz referenziert sich, trotz der Clone-Funktion.
Ich habe zwei einfache Klassen (c und c1) erstellt. Die eine (c1) hat eine Property vom Typ bool. Die andere Klasse(c) hat ein Array vom Typ c1. (Bsp. siehe unten)
Beide Klasse besitzen eine Clone-Funktion.
Problem ist jetzt, dass das Array im Hauptprogramm nicht kopiert, sondern referenziert wird. So blad ich einen Wert in der Quell-Klasse ändere, ändert sich auch der Wert der neuen Klasse.
Hat vielleicht jemand eine Idee, was ich sonst nach versuchen könnte?
Danke schonmal!
Lukas
Klassen:
Code:
//Klasse 1
class c
{
private c1[] arrTest;
public c1[] arr
{
get { return arrTest; }
set { arrTest = value; }
}
public c()
{
arrTest = new c1[5];
for (int i = 0; i < arrTest.Length; i++)
arrTest[i] = new c1();
}//c
public virtual c Clone()
{
c tmpThis = (c)MemberwiseClone();
//schon erfolglos getestet
//tmpThis.arrTest = (c1[])arrTest.Clone();
//Array.Copy(arrTest, tmpThis.arrTest, arrTest.Length);
for (int i = 0; i < arrTest.Length; i++)
tmpThis.arrTest[i] = this.arrTest[i].Clone();
return tmpThis;
}//Clone
}//class c
//Klasse 2
class c1
{
private bool bTest;
public bool Test
{
get { return bTest; }
set { bTest = value; }
}
public virtual c1 Clone()
{
return (c1)this.MemberwiseClone();
}//Clone
}//class c1
///////////////////////////////////////
c org = new c();
c bkp = org.Clone();
org.arr[0].Test = true;
//bkp.arr[0] ist jetzt auch true;
/////////////////////////////////////////