Home >Backend Development >C++ >How to Create a Deep or Shallow Copy of an Object in C#?
Object cloning in C#
The following code illustrates the difference in behavior of reference types (classes) and value types (structures) in C#. Specifically, the question is: How do you create a copy of an object in C# that points to a different area in memory?
Classes in C# are reference types, which means that when you assign a class object to another object, you are actually assigning a reference to the same underlying object. Therefore, any changes made to either object will affect both instances. In the provided code, when you assign objectA to objectB, you create an alias of objectA rather than a separate instance.
To create a true copy of an object, you need to implement the ICloneable
interface in your class. This interface provides the Clone()
method, which creates a new instance of the object. By overriding the Clone()
method you can control the cloning process and define which fields and properties should be copied.
In the provided code, the following code snippet demonstrates how to implement cloning:
<code class="language-csharp">class myClass : ICloneable { public String test; public object Clone() { return this.MemberwiseClone(); } }</code>
Once a class implements ICloneable
, you can create a real copy using the following code:
<code class="language-csharp">myClass a = new myClass(); myClass b = (myClass)a.Clone();</code>
It should be noted that MemberwiseClone()
creates a shallow copy, which copies the values of all fields and properties, but does not copy any nested objects. If you need to create a deep copy, you need to implement a custom cloning process that takes into account nested objects.
The above is the detailed content of How to Create a Deep or Shallow Copy of an Object in C#?. For more information, please follow other related articles on the PHP Chinese website!