Tôi đang học C# Deep Copy và Shallow Copy. Ở đây sau khi thay đổi trong demo_obj1, giá trị đối tượng được thay đổi nhưng danh sách không được cập nhật nhưng trong giá trị đối tượng demo_obj2 được thay đổi và cũng có giá trị danh sách được cập nhật. Có ai biết chuyện gì đang xảy ra ở đây không? Cảm ơnkết quả lạ trong Clone()
Visual studio 2017
.Net framework 4,6
public class Demo : ICloneable
{
public int Value { get; set; }
public string UID { get; set; }
public Demo(int nValue)
{
Value = nValue;
}
public object Clone()
{
return this.MemberwiseClone();
}
}
public class Program
{
public static void Print(List<Demo> objList)
{
Console.WriteLine();
foreach (Demo objDemo in objList)
{
Console.WriteLine("{0} = {1}", objDemo.UID, objDemo.Value);
}
}
public static void Main()
{
List<Demo> objList = new List<Demo>();
Demo obj1 = new Demo(100);
obj1.UID = "Demo_obj1";
Demo obj2 = (Demo)obj1.Clone();
obj2.UID = "Demo_obj2";
objList.Add(obj1);
objList.Add(obj2);
Print(objList);
obj1 = obj2;
obj1.Value = 200;
Console.WriteLine();
Console.WriteLine(obj1.UID + " = " + obj1.Value);
Console.WriteLine(obj2.UID + " = " + obj2.Value);
Print(objList);
Console.ReadKey();
}
}
Output:
Demo_obj1 = 100
Demo_obj2 = 100
Demo_obj2 = 200
Demo_obj2 = 200
Demo_obj1 = 100
Demo_obj2 = 200
@VladimirArustamian anh ấy sử dụng MemberwiseClone trong mã của anh ấy đã là –
Một tiêu đề mô tả hơn sẽ phù hợp. – user1803551