The constructor, which copy variables of another object and create a new object, is called a copy constructor. In C#, the copy constructor is also a parameterized constructor. A parameterized constructor is a constructor that contains a parameter of the same class type. The copy constructor is useful whenever we want to initialize a new instance to an existing instance’s values. So, the Copy constructor is a constructor that basically sends the values of one object to another object without affecting an existing object’s values.
In C#, we can use a copy constructor if we want to audit a class or remember the class’s old values. C# doesn’t provide a copy constructor. However, we can use a copy constructor along with another constructor.
Syntax
class Name { // Parameterized Constructor public Name(parameters) { // code } public Name(Name instance of class) //copyconstructor { //code } }
The name of the constructor is the same as its class name. Method Signature of constructor consists of the name of the method along with its parameter list. There can be any number of constructors in a class. The copy constructor is not the only constructor in a class. Another constructor is required with a copy constructor to create an object. The following are the example that shows how to use copy constructor for a class.
Code
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(); } }
In the above example, there is only one parameterized constructor, which has two variables. getData() is used to display the values of the object.
Output:
Code
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(); } }
In the above example, Demo is a class that contains two constructors. A copy constructor is always used with another constructor. A copy constructor sends the name and age properties of one object to another object. Below is the above program’s output as the first values are for the existing object, and copy the constructor copy these values and create a new object with the same values as of existing object.
Code
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(); }} }
In the above program, we initialize three variables for a class pen that defines the properties of the class. Copy constructor copies the properties of a pen from one object to another. The main() function initializes an object with the values as the parameters for the parameterized constructor. Then the values are displayed using getPendetails(). The new object does not affect the existing object values. The output is shown below.
Output:
Code
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(); } }
Now let us understand the above program.
The class contains the variables a and b and two constructors, i.e. a parameterized constructor and a copy constructor.
Code
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; } }
The copy constructor sends the values of the cal object into a and b. The function gets() returns the sum of a and b. The main() is in the class Sum, which initializes the c1 as the parameters and then copies constructor is sent the value of object c1 to object c2. The sum of a and b is displayed using the getSum().
Code
class Sum { // main method static void Main(string[] args) { Calculate c1 = new Calculate(34, 4); Calculate c2 = new Calculate(c1); c2.getSum(); Console.ReadLine(); } }
Output:
So whenever you want to copy an object value to other objects, you can use a copy constructor. It’s a way to tell the compiler how to copy one object’s values in another object. It happens when we pass parameters to an object. ICloneable interface is also used by adding a Clone method to your class, making a copy of the existing object. In copy constructor, you can specify custom behavior by giving a unique ID or by copying some required fields and not others.
The above is the detailed content of Copy Constructor in C#. For more information, please follow other related articles on the PHP Chinese website!