Updated March 16, 2023
Introduction to Copy Constructor in C#
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.
How does Copy Constructor work in C#?
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.
Example 1: Without Copy Constructor
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:
With Copy Constructor
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.
Example 2
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:
Example 3
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:
Rules for Copy Constructor in C#
- The name of the copy constructor should be the same as the class name.
- Another constructor is required with a copy constructor to copy an object.
- There is no return type of copy constructor.
- The copy constructor cannot be final, static and abstract.
Conclusion
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.
Recommended Articles
This has been a guide to Copy Constructor in C#. Here we discuss how copy constructors work in C#, with rules, syntax, and appropriate sample code. You can also go through our given articles to learn more-