Kopiowanie obiektów nie jest rzeczą tak oczywistą, jak mogłoby się wydawać. Zanim zapomnę, jak to było, zanotuję sobie kilka użytecznych fragmentów kodu (C#) 🙂
//ręczne kopiowanie: byte[,] oryginalna = new byte[2, 1]; byte[,] skopiowana = new byte[oryginalna.GetLength(0), oryginalna.GetLength(1)]; oryginalna[0, 0] = 0; oryginalna[1, 0] = 1; //kopiowanie przez Array.Copy - odnosi się do już istniejących tablic. //składnia: Array.Copy(źródło danych, cel danych, długość); Array.Copy(oryginalna, skopiowana, oryginalna.Length); //Gdy przy klonowaniu tworzymy nową tablicę: byte[,] sklonowana = (byte[,])oryginalna.Clone();
Nawet pomimo zmiany elementów tablicy oryginalnej, elementy tablicy skopiowanej (lub sklonowanej) nie ulegną zmianie – gdyż tablica „bytów”;) zawiera elementy proste, a nie referencje (referencje, czyli nie np. obiekt innej klasy).
Dobrze wytłumaczone jest to tu: http://arvangen.wordpress.com/2011/02/18/c-plytkie-i-glebokie-kopie-obiektow-wprowadzenie/oraz tu: http://www.csharp411.com/c-object-clone-wars/, więc nie będę się powtarzać;)