Copierea datelor este una dintre cele mai comune actiuni in programare. O metoda de copiere a fost prezentata in articolul Shallow copy.
O alta metoda de copiere o reprezinta deep copy. Deep copy reprezinta o modalitate de a clona un obiect. Deep copy va creea o copie a unui obiect in acelasi mod in care o face si shallow copy, cu deosebirea ca deep copy va face o copie separata pentru fiecare camp de tip referinta, din obiectul original. Implementarea acestei metode, in C#, poate fi scrisa astfel:
using System; namespace DeepCopy { class Program { /// <summary> /// Clasa Student /// </summary> class Student { public string Name { get; set; } public Info Info { get; set; } public Student DeepCopy() { //obtine o copie a membrilor obiectului var other = (Student)this.MemberwiseClone(); //pentru tipul referinta, copiaza obiectul referintiat other.Info = new Info(other.Info.Id); return other; } } /// <summary> /// Clasa Info /// </summary> class Info { public int Id { get; set; } public Info(int id) { Id = id; } } static void Main(string[] args) { //creeaza un obiect var s = new Student(); s.Name = "Marius"; s.Info = new Info(10); //creeaza o copie var s2 = s.DeepCopy(); //va afisa Marius Console.WriteLine(s2.Name); //va afisa 10 Console.WriteLine(s2.Info.Id); //modific valoarea obiectului s.Name = "Bogdan"; s.Info.Id = 100; //va afisa Marius Console.WriteLine(s2.Name); //va afisa 10 Console.WriteLine(s2.Info.Id); Console.ReadLine(); } } }
Deep copy mai poate fi implementata prin serializare sau cu ajutorul interfetei ICloneable.
Category: Uncategorized