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??