I have created a class
class MyClass:ICloneable
{
public int val;
public List<int> list;
public MyClass()
{
list = new List<int>();
}
public object Clone()
{
return this.MemberwiseClone();
}
}
and I run the below class
class ProgramTest
{
static void Main(string[] args)
{
MyClass objectA = new MyClass();
objectA.list.Add(1);
MyClass objectB = (MyClass)objectA.Clone();
objectA.val = 10;
objectB.val = 20;
objectB.list[0] = 20;
Console.WriteLine("objectA.val = {0}", objectA.val);
Console.WriteLine("objectA.list[0] = {0}", objectA.list[0]);
Console.WriteLine("objectB.val = {0}", objectB.val);
Console.WriteLine("objectB.list[0] = {0}", objectB.list[0]);
Console.ReadKey();
}
}
output:
objectA.val = 10;
objectA.list[0] = 20;
objectB.val = 20;
objectB.list[0] = 20;
My question is:
I have cloned the objectA to objectB, for value type (val) the output is as expected objectA is having 10 and objectB is having 20.
But for reference type like List the output is not as expected. I am getting objectA.list[0] as 20 and objectB.list[0] as 20. I was expecting objectA.list[0] as 1 and objectB.list[0] as 20.
Can someone please explain why clone is not working with List??