Wprowadzenie do Copy Constructor w C #

Konstruktor, który kopiuje zmienne innego obiektu i tworzy nowy obiekt, nazywa się konstruktorem kopiowania. W języku C # konstruktor kopiowania jest również sparametryzowanym konstruktorem. Konstruktor sparametryzowany to konstruktor, który zawiera parametr tego samego typu klasy. Konstruktor kopiowania jest przydatny, gdy chcemy zainicjować nowe wystąpienie zgodnie z wartościami istniejącego wystąpienia. Konstruktor Copy jest więc konstruktorem, który zasadniczo wysyła wartości jednego obiektu do innego obiektu bez wpływu na wartości istniejącego obiektu.

Jak działa Copy Constructor w C #?

W języku C # możemy użyć konstruktora kopiowania, jeśli chcemy przeprowadzić audyt klasy lub zapamiętać stare wartości klasy. C # nie zapewnia konstruktora kopiowania. Możemy jednak użyć konstruktora kopii wraz z innym konstruktorem.

Składnia
class Name (
// Parameterized Constructor
public Name(parameters)
(
// code
)
public Name(Name instance of class) //copyconstructor
(
//code
)
)

Nazwa konstruktora jest taka sama jak nazwa klasy. Metoda Podpis konstruktora składa się z nazwy metody wraz z listą parametrów. W klasie może znajdować się dowolna liczba konstruktorów. Konstruktor kopiowania nie jest jedynym konstruktorem w klasie. Do utworzenia obiektu wymagany jest inny konstruktor z konstruktorem kopii. Oto przykład pokazujący, jak używać konstruktora kopiowania dla klasy.

Przykład 1: Bez Konstruktora kopii

Kod

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

W powyższym przykładzie jest tylko jeden sparametryzowany konstruktor, który ma dwie zmienne. Funkcja getData () służy do wyświetlania wartości obiektu.

Wynik:

Z Copy Constructor

Kod

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

W powyższym przykładzie Demo jest klasą zawierającą dwa konstruktory. Konstruktor kopii jest zawsze używany z innym konstruktorem. Konstruktor kopii wysyła nazwę i wiek właściwości jednego obiektu do innego obiektu. Poniżej znajduje się wynik powyższego programu. Ponieważ pierwsze wartości dotyczą istniejącego obiektu i kopiuj konstruktora, skopiuj te wartości i utwórz nowy obiekt o takich samych wartościach, jak istniejący obiekt.

Przykład 2

Kod

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

W powyższym programie inicjujemy trzy zmienne dla pisaka klasowego, który definiuje właściwości klasy. Konstruktor kopiujący kopiuje właściwości pióra z jednego obiektu do drugiego. Funkcja main () inicjuje obiekt z wartościami jako parametrami sparametryzowanego konstruktora. Następnie wartości są wyświetlane za pomocą getPendetails (). Nowy obiekt nie wpływa na istniejące wartości obiektu. Dane wyjściowe pokazano poniżej

Wynik:

Przykład 3

Kod

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

Teraz zrozummy powyższy program.

Klasa zawiera zmienne aib oraz dwa konstruktory, tj. Sparametryzowany konstruktor i konstruktor kopiujący.

Kod

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

Konstruktor kopiujący wysyła wartości obiektu cal do a i b. Funkcja gets () zwraca sumę aib. Funkcja main () znajduje się w klasie Sum, która inicjuje parametr c1 jako parametry, a następnie konstruktor kopiuje wartość obiektu c1 do obiektu c2. Suma aib wyświetlana jest za pomocą getSum ().

Kod

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

Wynik:

Zasady kopiowania konstruktora w C #

  • Nazwa konstruktora kopiowania powinna być taka sama jak nazwa klasy.
  • Do skopiowania obiektu wymagany jest inny konstruktor z konstruktorem kopiowania.
  • Nie ma typu zwracanego konstruktora kopiowania.
  • Konstruktor kopii nie może być ostateczny, statyczny ani abstrakcyjny.

Wniosek

Jeśli więc chcesz skopiować wartość obiektu do innych obiektów, możesz użyć konstruktora kopiowania. Jest to sposób na poinformowanie kompilatora, jak skopiować wartości jednego obiektu do innego obiektu. Dzieje się tak, gdy przekazujemy parametry do obiektu. Interfejs ICloneable jest również używany przez dodanie do klasy metody Clone, która tworzy kopię istniejącego obiektu. W konstruktorze kopiowania można określić niestandardowe zachowanie, podając unikalny identyfikator lub kopiując niektóre wymagane pola, a nie inne.

Polecane artykuły

To był przewodnik po Copy Constructor w C #. Tutaj omawiamy, jak działa konstruktor kopiowania w języku C #, z regułami, składnią i odpowiednim przykładem kodu. Możesz również przejrzeć nasze podane artykuły, aby dowiedzieć się więcej-

  1. Instrukcja C # if
  2. C # do-while loop
  3. Funkcje C #
  4. Skopiuj konstruktor w C ++ z przykładem
  5. Wprowadzenie do konstruktora w C.
  6. Typy konstruktorów w C # z implementacją kodu