Copiar um objeto em C#
-
Copie um objeto com o método
MemberWiseClone()
emC#
-
Copiar um objeto com o método do construtor parametrizado em
C#
Este tutorial irá apresentar métodos para copiar um objeto em C#.
Copie um objeto com o método MemberWiseClone()
em C#
Infelizmente, não existe uma maneira interna de criar uma cópia separada de um objeto em C#. Esse fenômeno é demonstrado no exemplo de código a seguir.
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);
}
}
}
Resultado:
This is not a test This is not a test
Obtemos a mesma saída nas duas vezes porque uma instância de uma classe em C# é uma variável do tipo de referência que aponta para um local de memória específico. Devido à natureza Orientada a Objetos do C#, o novo ponteiro b
também está apontando para a localização da memória de a
.
Se quisermos criar uma localização de memória separada para b
, temos que confiar em algumas abordagens definidas pelo usuário. O MemberWiseClone()
método é usado para criar uma cópia separada dos valores do objeto de chamada em C#. O tipo de retorno da função MemberWiseClone()
é objeto. O exemplo de código a seguir nos mostra como criar uma cópia separada de um objeto de classe com a função MemberWiseClone()
em 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);
}
}
}
Resultado:
This is a test This is not a test
Desta vez, fica claro pela saída que há uma cópia separada para cada objeto de classe. Implementamos a função MemberWiseClone()
dentro da função Clone()
da classe myClass
. A função Clone()
retorna uma cópia separada do objeto de classe. O valor de retorno da função Clone()
é convertido em tipo para myClass
e apontado pelo objeto de classe b
.
Copiar um objeto com o método do construtor parametrizado em C#
Podemos criar um construtor de classe parametrizado para atingir o mesmo objetivo em C#. Podemos passar o objeto de classe anterior para o construtor de um novo objeto de classe e copiar todos os valores dele. O exemplo de código a seguir nos mostra como podemos criar uma cópia separada de um objeto de classe com o método construtor parametrizado em 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);
}
}
}
Resultado:
This is a test This is not a test
Criamos um construtor parametrizado para a classe MyClass
que pega um objeto da classe MyClass
e copia a string test
dela. Na função main
, criamos o objeto a
da classe MyClass
e o passamos para o construtor de 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