Introdução ao Copy Constructor in C #

O construtor, que copia variáveis ​​de outro objeto e cria um novo objeto, é chamado construtor de cópia. Em C #, o construtor de cópia também é um construtor parametrizado. Um construtor parametrizado é um construtor que contém um parâmetro do mesmo tipo de classe. O construtor de cópia é útil sempre que queremos inicializar uma nova instância com os valores de uma instância existente. Portanto, o construtor Copy é um construtor que basicamente envia os valores de um objeto para outro, sem afetar os valores do objeto existente.

Como o Copy Constructor funciona em C #?

Em C #, podemos usar um construtor de cópia se quisermos auditar uma classe ou lembrar os valores antigos da classe. C # não fornece um construtor de cópias. No entanto, podemos usar um construtor de cópia junto com outro construtor.

Sintaxe
class Name (
// Parameterized Constructor
public Name(parameters)
(
// code
)
public Name(Name instance of class) //copyconstructor
(
//code
)
)

O nome do construtor é igual ao nome da classe. Método A assinatura do construtor consiste no nome do método, juntamente com sua lista de parâmetros. Pode haver qualquer número de construtores em uma classe. O construtor de cópia não é o único construtor de uma classe. Outro construtor é necessário com um construtor de cópia para criar um objeto. A seguir, o exemplo que mostra como usar o construtor de cópia para uma classe.

Exemplo 1: sem construtor de cópias

Código

class Demo
(
//variables
string name;
int age;
public Demo(string name, int age) //parameterized constructor
(
this.name = name;
this.age = age;
)
public void getData()
(
Console.WriteLine("Name is:(0)", name);
Console.WriteLine("Age is:(0)", age);
)
)
class Program
(
// Main method
static void Main(string() args)
(
Demo obj = new Demo("John", 20);
obj.getData();
Console.ReadLine();
)
)

No exemplo acima, existe apenas um construtor parametrizado que possui duas variáveis. getData () é usado para exibir os valores do objeto.

Resultado:

Com o Construtor de Cópias

Código

class Demo
(
string name;
int age;
public Demo(string name, int age) //paramertrized constructor
(
this.name = name;
this.age = age;
)
public Demo(Demo d) //copy constructor
(
this.name = d.name;
this.age = d.age;
)
public void getData()
(
Console.WriteLine("Name is:(0)", name);
Console.WriteLine("Age is:(0)", age);
)
)
class Program
(
//main method
static void Main(string() args)(
Demo obj = new Demo("John", 20);
obj.getData();
Demo obj1 = new Demo(obj); //new object
obj1.getData();
Console.ReadLine();
)
)

No exemplo acima, Demo é uma classe que contém dois construtores. Um construtor de cópia é sempre usado com outro construtor. Um construtor de cópia envia as propriedades de nome e idade de um objeto para outro objeto. Abaixo está a saída do programa acima. Como os primeiros valores são para o objeto existente, o construtor de cópias copia esses valores e cria um novo objeto com os mesmos valores que o objeto existente.

Exemplo 2

Código

class pen
(
// variables
private string name;
private string color;
private int price;
// Copy constructor
public pen(pen a)
(
name = a.name;
color = a.color;quantity = a.price;
)
// Parameterized constructor
public pen(string name, string color, int price)(
this.name = name;
this.color = color;
this.quantity =price;
)
public void getPendetails()
(Console.WriteLine("Name is:(0)", name);
Console.WriteLine("color is:(0)", color);
Console.WriteLine("price is:(0)", price);
)
// Main Method
public static void Main()
(
// Create a new object.
pen p1 = new pen("Parker", "Blue", 30);
pen p2 = new pen(p1);
p2.getPendetails();
Console.ReadLine();
))
)

No programa acima, inicializamos três variáveis ​​para uma caneta de classe que define as propriedades da classe. O construtor Copy copia as propriedades de uma caneta de um objeto para outro. A função main () inicializa um objeto com os valores como parâmetros para o construtor parametrizado. Em seguida, os valores são exibidos usando getPendetails (). O novo objeto não afeta os valores existentes do objeto. A saída é mostrada abaixo

Resultado:

Exemplo 3

Código

class Calculate
(
//variables
private int a;
private int b;
public Calculate(int x, int y) // parameterized constructor
(
a = x;
b = y;
)
public Calculate(Calculate cal) //copy constructor
(
a = cal.a;
b = cal.b;
)
public int getSum()
(
return a + b;
)
)
class Sum
(
// main method
static void Main(string() args)
(
// create a new object
Calculate c1 = new Calculate(34, 4);
Calculate c2 = new Calculate(c1);
c2.getSum();
Console.ReadLine();
)
)

Agora vamos entender o programa acima.

A classe contém as variáveis ​​aeb e dois construtores, isto é, um construtor parametrizado e um construtor de cópias.

Código

class Calculate
(
//variables
private int a;
private int b;
public Calculate(int x, int y) //parameterized constructor
(
a = x;
b = y;
)
public Calculate(Calculate cal) //copy constructor
(
a = cal.a;
b = cal.b;
)
public int getSum()
(
return a + b;
)
)

O construtor de cópia envia os valores do objeto cal em a e b. A função gets () retorna a soma de a e b. O main () está na classe Sum, que inicializa o c1 como os parâmetros e depois copia o construtor, recebe o valor do objeto c1 para o objeto c2. A soma de aeb é exibida usando o getSum ().

Código

class Sum
(
// main method
static void Main(string() args)
(
Calculate c1 = new Calculate(34, 4);
Calculate c2 = new Calculate(c1);
c2.getSum();
Console.ReadLine();
)
)

Resultado:

Regras para o Construtor de Cópias em C #

  • O nome do construtor de cópia deve ser o mesmo que o nome da classe.
  • Outro construtor é necessário com um construtor de cópia para copiar um objeto.
  • Não há tipo de retorno do construtor de cópias.
  • O construtor de cópias não pode ser final, estático e abstrato.

Conclusão

Portanto, sempre que desejar copiar um valor de objeto para outros objetos, você poderá usar um construtor de cópia. É uma maneira de dizer ao compilador como copiar os valores de um objeto em outro objeto. Isso acontece quando passamos parâmetros para um objeto. A interface ICloneable também é usada adicionando um método Clone à sua classe que faz uma cópia do objeto existente. No construtor de cópias, você pode especificar um comportamento personalizado, fornecendo um ID exclusivo ou copiando alguns campos obrigatórios e outros não.

Artigos recomendados

Este foi um guia para o Copy Constructor em C #. Aqui discutimos como o construtor de cópias funciona em C #, com regras, sintaxe e código de exemplo apropriado. Você também pode ler nossos artigos para saber mais.

  1. C # if Instrução
  2. C # do-while loop
  3. Funções C #
  4. Copiar Construtor em C ++ com Exemplo
  5. Introdução ao Construtor em C
  6. Tipos de construtor em C # com implementação de código