Una din metodele pentru copierea unui obiect o reprezinta shallow copy. Ea consta in crearea unui nou obiect si copierea membrilor, care nu sunt statici, ale obiectului curent catre un nou obiect.
Clasa Object contine o metoda de tip protected numita MemberwiseClone.
In cazul in care campurile sunt de tip valoare, copierea are loc bit cu bit, acesta fiind cel mai fericit caz. In cazul in care campurile sunt de tip referinta, referinta este copiata, dar obiectul referentiat, nu. Exemplu:
using System; namespace MemberWiseExample { /// <summary> /// Clasa Student /// </summary> class Student { public string Name { get; set; } public Info Info { get; set; } public Student ShallowCopy() { return (Student)this.MemberwiseClone(); } } /// <summary> /// Clasa Info /// </summary> class Info { public int Id { get; set; } public Info(int id) { Id = id; } } class Program { static void Main(string[] args) { //se creeaza un obiect de tip Student Student s = new Student (); s.Name = "Marius"; s.Info = new Info(1); //se creeaza un obiect de tip student prin copia primului obiect Student s2 = s.ShallowCopy(); //Marius Console.WriteLine(s2.Name); //1 Console.WriteLine(s2.Info.Id); s.Name = "Bogdan"; //Bogdan Console.WriteLine(s.Name); //Marius Console.WriteLine(s2.Name); s.Info.Id = 34; //34 Console.WriteLine(s.Info.Id); //34 Console.WriteLine(s2.Info.Id); Console.ReadLine(); } } }
Shallow copy mai este denumita si memberwise copy. Se recomanda pentru cresterea performantei si in conditiile in care obiectul nu are membri care se modifice frecvent.
Category: Uncategorized
Pingback/Trackback
Deep copy in C# | by zeltera