Risipa de key_press | Programare

Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Risipa de key_press | Programare - Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Deep copy in C#

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

Your email address will not be published. Required fields are marked *

*