Copiare un oggetto in C#
-
Copiare un oggetto con il metodo
MemberWiseClone()
inC#
-
Copiare un oggetto con il metodo del costruttore con parametri in
C#
Questo tutorial introdurrà metodi per copiare un oggetto in C#.
Copiare un oggetto con il metodo MemberWiseClone()
in C#
Sfortunatamente, non esiste un modo predefinito per creare una copia separata di un oggetto in C#. Questo fenomeno è illustrato nel seguente esempio di codice.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace copy_an_object {
class myClass {
public String test;
}
class Program {
static void Main(string[] args) {
myClass a = new myClass();
a.test = "This is a test";
myClass b = a;
b.test = "This is not a test";
Console.WriteLine(a.test);
Console.WriteLine(b.test);
}
}
}
Produzione:
This is not a test This is not a test
Otteniamo lo stesso output entrambe le volte perché un’istanza di una classe in C# è una variabile di tipo riferimento che punta a una posizione di memoria specifica. A causa della natura orientata agli oggetti di C#, il nuovo puntatore b
punta anche alla posizione di memoria di a
.
Se vogliamo creare una locazione di memoria separata per b
, dobbiamo fare affidamento su alcuni approcci definiti dall’utente. Il metodo MemberWiseClone()
viene utilizzato per creare una copia separata dei valori dell’oggetto chiamante in C#. Il tipo di ritorno della funzione MemberWiseClone()
è object. Il seguente esempio di codice ci mostra come creare una copia separata di un oggetto classe con la funzione MemberWiseClone()
in C#.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace copy_an_object {
class myClass {
public String test;
public object Clone() {
return this.MemberwiseClone();
}
}
class Program {
static void Main(string[] args) {
myClass a = new myClass();
a.test = "This is a test";
myClass b = (myClass)a.Clone();
b.test = "This is not a test";
Console.WriteLine(a.test);
Console.WriteLine(b.test);
}
}
}
Produzione:
This is a test This is not a test
Questa volta è chiaro dall’output che esiste una copia separata per ogni oggetto classe. Abbiamo implementato la funzione MemberWiseClone()
all’interno della funzione Clone()
della classe myClass
. La funzione Clone()
restituisce una copia separata dell’oggetto classe. Il valore di ritorno della funzione Clone()
è convertito in myClass
e puntato dall’oggetto classe b
.
Copiare un oggetto con il metodo del costruttore con parametri in C#
Possiamo creare un costruttore di classi parametrizzato per raggiungere lo stesso obiettivo in C#. Possiamo passare l’oggetto della classe precedente al costruttore di un nuovo oggetto della classe e copiarne tutti i valori. Il seguente esempio di codice ci mostra come creare una copia separata di un oggetto classe con il metodo del costruttore parametrizzato in C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace copy_an_object {
class MyClass {
public String test;
public MyClass() {}
public MyClass(MyClass other) {
test = other.test;
}
}
class Program {
static void Main(string[] args) {
MyClass a = new myClass();
a.test = "This is a test";
MyClass b = new MyClass(a);
b.test = "This is not a test";
Console.WriteLine(a.test);
Console.WriteLine(b.test);
}
}
}
Produzione:
This is a test This is not a test
Abbiamo creato un costruttore parametrizzato per la classe MyClass
che prende un oggetto della classe MyClass
e copia da esso la stringa test
. Nella funzione main
, abbiamo creato l’oggetto a
della classe MyClass
e lo abbiamo passato al costruttore di b
.
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedIn