C# supports two basic types of object copying:
Let’s have a look at how shallow copying can be done in C#.
In the case of shallow copying, a copy of the references/addresses is made. Therefore, the addresses of the original and the copied object will be the same because they will point to the same memory location.
Let’s create the class Person
, which will have the attributes name
, ID
, and age
. The ID
attribute will hold a PersonID
class object. This class will also include a ShallowCopy
method to create a shallow copy of the object. The built-in C# class function this.MemberwiseClone()
will create a shallow copy of the current System.Object
. See the code below:
class ShallowCopyDemo {static void Main(string[] args){Person p1 = new Person();p1.name = "Hassan";p1.age = 22;p1.ID = new PersonID(3343);// Calling ShallowCopy() methodPerson p2 = p1.ShallowCopy();System.Console.WriteLine("Before Changing: ");// Value of attributes of c1 and c2 before changing// the valuesSystem.Console.WriteLine("p1 instance values: ");System.Console.WriteLine(" Name: {0:s}, Age: {1:d}", p1.name, p1.age);System.Console.WriteLine(" Value: {0:d}", p1.ID.IDNumber);System.Console.WriteLine("p2 instance values:");System.Console.WriteLine(" Name: {0:s}, Age: {1:d}", p2.name, p2.age);System.Console.WriteLine(" Value: {0:d}", p2.ID.IDNumber);// Modifying attributes of p1p1.name = "Hamza";p1.age = 20;p1.ID.IDNumber = 4544;System.Console.WriteLine("\nAfter Changing attributes of p1: ");// Value of attributes of c1 and c2 after changing// the valuesSystem.Console.WriteLine("p1 instance values: ");System.Console.WriteLine(" Name: {0:s}, Age: {1:d}", p1.name, p1.age);System.Console.WriteLine(" Value: {0:d}", p1.ID.IDNumber);System.Console.WriteLine("p2 instance values:");System.Console.WriteLine(" Name: {0:s}, Age: {1:d}", p2.name, p2.age);System.Console.WriteLine(" Value: {0:d}", p2.ID.IDNumber);}}public class PersonID{public int IDNumber;public PersonID(int id){this.IDNumber = id;}}public class Person{public int age;public string name;public PersonID ID;public Person ShallowCopy(){return (Person) this.MemberwiseClone();}}
The Person.ID
property returns a PersonID
object. When a Person
object is cloned through the MemberwiseClone
method, the cloned Person
object becomes an independent copy, but both objects still share the same Person.ID
object reference.
Therefore, modifying the clone’s Person.ID
attribute also changes the original object’s Person.ID
attribute.
Free Resources