Creazione di una copia di un oggetto in C#

Creazione di una copia di un oggetto in C#

Potresti fare:

class myClass : ICloneable
{
    public String test;
    public object Clone()
    {
        return this.MemberwiseClone();
    }
}

allora puoi farlo

myClass a = new myClass();
myClass b = (myClass)a.Clone();

NB MemberwiseClone() Crea una copia superficiale dell'oggetto System.Object corrente.


Non esiste un modo integrato. Puoi fare in modo che MyClass implementi il ​​IClonable interfaccia (ma è un po' deprecato) o semplicemente scrivi il tuo metodo Copia/Clone. In entrambi i casi dovrai scrivere del codice.

Per oggetti di grandi dimensioni potresti considerare Serialization + Deserialization (attraverso un MemoryStream), solo per riutilizzare il codice esistente.

Qualunque sia il metodo, pensa attentamente a cosa significa esattamente "una copia". Quanto deve andare in profondità, ci sono campi ID da escludere ecc.


Il modo più semplice per farlo è scrivere un costruttore di copia nella classe MyClass.

Qualcosa del genere:

namespace Example
{
    class MyClass
    {
        public int val;

        public MyClass()
        {
        }

        public MyClass(MyClass other)
        {
            val = other.val;
        }
    }
}

Il secondo costruttore accetta semplicemente un parametro del proprio tipo (quello che si vuole copiare) e crea un nuovo oggetto assegnato con lo stesso valore

class Program
{
    static void Main(string[] args)
    {
        MyClass objectA = new MyClass();
        MyClass objectB = new MyClass(objectA);
        objectA.val = 10;
        objectB.val = 20;
        Console.WriteLine("objectA.val = {0}", objectA.val);
        Console.WriteLine("objectB.val = {0}", objectB.val);
        Console.ReadKey();
    }
}

uscita:

objectA.val = 10

objectB.val = 20