什么是淺拷貝?
淺拷貝是指copy的對象和被copy的對象它們公用一個實體,也就是同時指向內存中的一個相同的地址。比如,有的地方把太陽叫“太陽”,而有的地方把太陽叫做“日頭”,不管是“太陽”還是“日頭”,指的都是太陽這個物體,如果某天“太陽”缺了一塊兒(只說如果),那么“日頭”也肯定會缺一塊兒,因為它們是指的是同一物體,只是稱呼不同。
什么是深拷貝?
深拷貝是指copy的對象和被copy的對象兩個都是獨立的、互不影響的。就像玩具廠生產出來的玩具,它們是一模一樣的,都可以被買走,但是又是誰也不影響誰。
* 一般來講,值類型的copy都屬於深拷貝,而引用類型copy都屬於淺拷貝(string類型除外)。
如何實現深拷貝?
克隆的方法網上有很多,就不多說了。這里給大家推薦一種非常簡單、易懂而且安全實用的方法來實現深拷貝,歡迎大家指出不足^_^
public class User { string name; public string Name //姓名 { get { return name; } set { name = value; } } int age; public int Age //年齡 { get { return age; } set { age = value; } } bool gender; public bool Gender //性別 { get { return gender; } set { gender = value; } } public User Copy(User user) //深拷貝方法 { //創建一個新的User對象 User newUser = new User(); //將你要Copy的User對象的所有屬性賦值給新建的User對象 newUser.Name = user.Name; newUser.Age = user.Age; newUser.Gender = user.Gender; //將賦值后的User對象return,這樣你就得到了一個和你要Copy的User對象一模一樣的新的User對象 return newUser; } }
測試代碼:
class Program { static void Main(string[] args) { //創建一個名為張三的User對象 User user = new User(); user.Age = 18; user.Name = "張三"; user.Gender = false; //將張三這個User對象Copy給newUser User newUser = user.Copy(user); //改變張三這個對象的各個屬性 user.Name = "李四"; user.Age = 20; user.Gender = true; //輸出張三的信息 Console.WriteLine(user.Name); Console.WriteLine(user.Age); Console.WriteLine(user.Gender); Console.WriteLine(); //輸出newUser的信息 Console.WriteLine(newUser.Name); Console.WriteLine(newUser.Age); Console.WriteLine(newUser.Gender); Console.ReadLine(); } }
