Introducere în Copy Constructor în C #

Constructorul, care copiază variabilele unui alt obiect și creează un nou obiect se numește constructor de copiere. În C #, constructorul de copiere este de asemenea un constructor parametrizat. Un constructor parametrizat este un constructor care conține un parametru de același tip de clasă. Constructorul de copiere este util de fiecare dată când dorim să inițializăm o nouă instanță la valorile unei instanțe existente. Deci, constructorul de copiere este un constructor care trimite practic valorile unui obiect la alt obiect, fără a afecta valorile obiectului existent.

Cum funcționează Copy Constructor în C #?

În C #, putem folosi un constructor de copiere dacă dorim să audităm o clasă sau să ne amintim valorile vechi ale clasei. C # nu furnizează un constructor de copiere. Cu toate acestea, putem folosi un constructor de copie împreună cu un alt constructor.

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

Numele constructorului este același cu numele clasei sale. Metodă Semnătura constructorului constă în numele metodei împreună cu lista parametrilor acesteia. Poate fi orice număr de constructori dintr-o clasă. Constructorul de copiere nu este singurul constructor dintr-o clasă. Un alt constructor este necesar cu un constructor de copiere pentru a crea un obiect. Următorul este exemplul care arată cum să folosești constructorul de copiere pentru o clasă.

Exemplul 1: fără constructor de copiere

Cod

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

În exemplul de mai sus, există un singur constructor parametrizat care are două variabile. getData () este utilizat pentru a afișa valorile obiectului.

ieşire:

Cu Copy Constructor

Cod

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

În exemplul de mai sus, Demo este o clasă care conține doi constructori. Un constructor de copiere este folosit întotdeauna cu un alt constructor. Un constructor de copie trimite numele și proprietățile de vârstă ale unui obiect unui alt obiect. Mai jos este rezultatul programului de mai sus. Întrucât primele valori sunt pentru obiectul existent și constructorul de copiere copiază aceste valori și creează un nou obiect cu aceleași valori ca și obiectul existent.

Exemplul 2

Cod

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

În programul de mai sus, inițializăm trei variabile pentru un stilou de clasă care definește proprietățile clasei. Copiator de copiere copiază proprietățile unui stilou de la un obiect la altul. Funcția principală () inițializează un obiect cu valorile ca parametri pentru constructorul parametrizat. Apoi, valorile sunt afișate folosind getPendetails (). Noul obiect nu afectează valorile obiectului existente. Ieșirea este prezentată mai jos

ieşire:

Exemplul 3

Cod

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

Acum să înțelegem programul de mai sus.

Clasa conține variabilele a și b și doi constructori adică un constructor parametrizat și un constructor de copiere.

Cod

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

Constructorul de copie trimite valorile obiectului cal în a și b. Funcția devine () returnează suma lui a și b. Principala () se află în clasa Suma care inițializează c1 ca parametri și apoi copiază constructorul este trimisă valoarea obiectului c1 la obiectul c2. Suma lui a și b este afișată folosind getSum ().

Cod

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

ieşire:

Reguli pentru constructorul de copiere în C #

  • Numele constructorului de copie trebuie să fie același cu numele clasei.
  • Un alt constructor este necesar cu un constructor de copiere pentru a copia un obiect.
  • Nu există niciun tip de retur al constructorului de copii.
  • Constructorul de copiere nu poate fi final, static și abstract.

Concluzie

Deci, de fiecare dată când doriți să copiați o valoare a unui obiect pe alte obiecte, puteți utiliza un constructor de copiere. Este o modalitate de a spune compilatorului cum poate copia valorile unui obiect într-un alt obiect. Se întâmplă când trecem parametrii la un obiect. Interfața ICloneable este de asemenea utilizată prin adăugarea unei metode Clone la clasa dvs. care face o copie a obiectului existent. În constructorul de copiere, puteți specifica comportamentul personalizat, dând un ID unic sau copiind unele câmpuri obligatorii și nu altele.

Articole recomandate

Acesta a fost un ghid pentru Copy Constructor în C #. Aici vom discuta despre cum funcționează constructorul de copiere în C #, cu reguli, sintaxă, împreună cu codul de eșantion adecvat. De asemenea, puteți parcurge articolele noastre date pentru a afla mai multe-

  1. C # dacă declarație
  2. C # bucla do-while
  3. C # Funcții
  4. Copiați constructorul în C ++ cu exemplu
  5. Introducere în constructor în C
  6. Tipuri de constructor în C # cu implementarea codului