Search code examples
c#cloneshallow-copy

.net memberwiseclone shallow copy not working


I am using this.MemberwiseClone() to create shallowcopy but it is not working. Please look at the code below.

public class Customer
    {

        public int Id;
        public string Name;

        public Customer CreateShallowCopy()
        {
            return (Customer)this.MemberwiseClone();
        }
    }

class Program
{
    static void Main(string[] args)
    {
        Customer objCustomer = new Customer() { Id = 1, Name = "James"};
        Customer objCustomer2 = objCustomer;

        Customer objCustomerShallowCopy = objCustomer.CreateShallowCopy();

        objCustomer.Name = "Jim";
        objCustomer.Id = 2;            
    }
}

When I run the program, It shows objCustomerShallowCopy.Name as "James" rather than "Jim".

Any Ideas??


Solution

  • When you shallow copy the Customer object the objCustomerShallowCopy.Name will be James and will stay like that until you change that object. Now in your case the string "James" will gave 3 references to it (objCustomer, objCustomer2 and objCustomerShallowCopy).

    When you are changing objCustomer.Name to Jim you are actually creating a new string object for the objCustomer object and releasing 1 ref to the "James" string object.