我正在學習C#深層複製和淺拷貝。在demo_obj1中的更改之後,對象值發生了更改,但列表未更新,但在demo_obj2中更改了對象值並更新了列表值。任何人都知道這裏發生了什麼? 感謝Clone中的奇怪結果()
的Visual Studio 2017年
Net框架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();
}
}
輸出:
Demo_obj1 = 100
Demo_obj2 = 100
Demo_obj2 = 200
Demo_obj2 = 200
Demo_obj1 = 100
Demo_obj2 = 200
@VladimirArustamian他在他的代碼中使用MemberwiseClone已經 –
一個更具描述性的標題將是適當的。 – user1803551