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