C# 變數分為值類型與引用類型。對於值類型,賦值(=)即完成深/淺拷貝,效果一致。本文聚焦引用類型的拷貝機制。
特殊說明:string 雖為引用類型,但因不可變特性,淺拷貝時視同值類型處理。
Object.MemberwiseClone() 建立淺層副本:非靜態欄位逐位複製,值類型複製數值,引用類型複製參考。
public class Person
{
public int Age { get; set; }
public string Address { get; set; }
public Name Name { get; set; }
public object Clone()
{
return this.MemberwiseClone(); // 僅淺拷貝
}
}
public class Name
{
public Name(string frisName, string lastName)
{
FristName = frisName;
LastName = lastName;
}
public string FristName { get; set; }
public string LastName { get; set; }
}
呼叫 Clone() 後,Person.Name 仍指向同一 Name 實例,修改將互相影響。