Introducción a Copy Constructor en C #

El constructor, que copia las variables de otro objeto y crea un nuevo objeto, se llama un constructor de copia. En C #, el constructor de copia también es un constructor parametrizado. Un constructor parametrizado es un constructor que contiene un parámetro del mismo tipo de clase. El constructor de copia es útil siempre que queramos inicializar una nueva instancia a los valores de una instancia existente. Entonces, el constructor Copiar es un constructor que básicamente envía los valores de un objeto a otro objeto sin afectar los valores del objeto existente.

¿Cómo funciona Copy Constructor en C #?

En C #, podemos usar un constructor de copia si queremos auditar una clase o recordar los valores antiguos de la clase. C # no proporciona un constructor de copia. Sin embargo, podemos usar un constructor de copia junto con otro constructor.

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

El nombre del constructor es el mismo que el nombre de su clase. Método La firma del constructor consta del nombre del método junto con su lista de parámetros. Puede haber cualquier cantidad de constructores en una clase. El constructor de copia no es el único constructor en una clase. Se requiere otro constructor con un constructor de copia para crear un objeto. Los siguientes son ejemplos que muestran cómo usar el constructor de copia para una clase.

Ejemplo 1: sin constructor de copia

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();
)
)

En el ejemplo anterior, solo hay un constructor parametrizado que tiene dos variables. getData () se usa para mostrar los valores del objeto.

Salida:

Con Copy Constructor

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();
)
)

En el ejemplo anterior, Demo es una clase que contiene dos constructores. Un constructor de copia siempre se usa con otro constructor. Un constructor de copia envía las propiedades de nombre y antigüedad de un objeto a otro objeto. A continuación se muestra la salida del programa anterior. Como los primeros valores son para el objeto existente y el constructor de copia, copie estos valores y cree un nuevo objeto con los mismos valores que el objeto existente.

Ejemplo 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();
))
)

En el programa anterior, inicializamos tres variables para una pluma de clase que define las propiedades de la clase. Copiar constructor copia las propiedades de un lápiz de un objeto a otro. La función main () inicializa un objeto con los valores como parámetros para el constructor parametrizado. Luego, los valores se muestran usando getPendetails (). El nuevo objeto no afecta los valores de objeto existentes. La salida se muestra a continuación.

Salida:

Ejemplo 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();
)
)

Ahora déjenos entender el programa anterior.

La clase contiene las variables a y by dos constructores, es decir, un constructor parametrizado y un constructor de copia.

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;
)
)

El constructor de copia envía los valores del objeto cal en ay b. La función gets () devuelve la suma de a y b. El main () está en la clase Sum que inicializa el c1 como los parámetros y luego copia al constructor se le envía el valor del objeto c1 al objeto c2. La suma de ayb se muestra usando 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();
)
)

Salida:

Reglas para Copy Constructor en C #

  • El nombre del constructor de la copia debe ser el mismo que el nombre de la clase.
  • Se requiere otro constructor con un constructor de copia para copiar un objeto.
  • No hay ningún tipo de retorno de constructor de copia.
  • El constructor de copia no puede ser final, estático y abstracto.

Conclusión

Entonces, cada vez que desee copiar un valor de objeto a otros objetos, puede usar un constructor de copia. Es una forma de decirle al compilador cómo copiar los valores de un objeto en otro objeto. Sucede cuando pasamos parámetros a un objeto. La interfaz ICloneable también se usa agregando un método Clone a su clase que hace una copia del objeto existente. En el constructor de copias, puede especificar un comportamiento personalizado al proporcionar una ID única o al copiar algunos campos obligatorios y no otros.

Artículos recomendados

Esta ha sido una guía para Copy Constructor en C #. Aquí discutimos cómo funciona el constructor de copia en C #, con reglas, sintaxis, junto con el código de muestra apropiado. También puede consultar nuestros artículos para obtener más información.

  1. C # si declaración
  2. C # do-while loop
  3. Funciones de C #
  4. Copiar constructor en C ++ con ejemplo
  5. Introducción a Constructor en C
  6. Tipos de constructor en C # con implementación de código