目錄C#中的對象深拷貝和淺拷貝概述1. 淺拷貝2. 深拷貝總結(jié)引用 C#中的對象深拷貝和淺拷貝 概述 在C#中,對象拷貝是指將一個(gè)對象的副本創(chuàng)建到另一個(gè)對象中。對象拷貝通常用于數(shù)據(jù)傳輸或創(chuàng)建對象的新實(shí)例。 C#中有兩種主要的拷貝方式:淺拷貝和深拷貝 1. 淺拷貝 淺拷貝是指只拷貝對象的值類型成員,而
在C#中,對象拷貝是指將一個(gè)對象的副本創(chuàng)建到另一個(gè)對象中。對象拷貝通常用于數(shù)據(jù)傳輸或創(chuàng)建對象的新實(shí)例。
C#中有兩種主要的拷貝方式:淺拷貝和深拷貝。
淺拷貝是指只拷貝對象的值類型成員,而引用類型成員的引用則保持不變。這意味著新的對象和原始對象將共享所有引用類型成員的實(shí)際對象。
實(shí)現(xiàn)方式:
this.MemberwiseClone();
示例代碼:
public class Person
{
public Person()
{
this.Address = new Address();
}
public string Name { get; set; }
public int Age { get; set; }
public Address Address { get; set; }
public Person Clone()
{
return (Person)this.MemberwiseClone();
}
}
public class Address
{
public string Street { get; set; }
public string City { get; set; }
}
Person person1 = new Person()
{
Name = "張三",
Address = new Address()
{
City = "北京",
}
};
Person person2 = person1.Clone(); // 淺拷貝
// 修改原對象的屬性
person1.Address.City = "上海";
// 修改副本對象的屬性
person2.Name = "李四";
person2.Address.City = "昆明";
string result = $"原對象{JsonConvert.SerializeObject(person1)}。副本{JsonConvert.SerializeObject(person2)}";
MessageBox.Show($"淺拷貝:原對象和副本修改引用類型屬性后相互影響。{result}");
深拷貝是指不僅拷貝對象的值類型成員,而且還拷貝所有引用類型成員的實(shí)際對象。這意味著新的對象將擁有其引用類型成員的完全獨(dú)立副本。
實(shí)現(xiàn)方式:
反射、序列化、對象映射(三方開源如TinyMapper、AutoMapper)。
示例代碼:
public static void Copy2()
{
Person person1 = new Person()
{
Name = "張三",
Address = new Address()
{
City = "北京",
}
};
Person person2 =person1.MapTo();//深拷貝3對象映射
//修改原對象的屬性
person1.Address.City = "上海";
//修改副本對象的屬性
person2.Name = "李四";
person2.Address.City = "昆明";
string result = $"原對象{JsonConvert.SerializeObject(person1)}。副本{JsonConvert.SerializeObject(person2)}";
MessageBox.Show($"深拷貝:原對象和副本不相互影響。{result}");
}
淺拷貝通常用于數(shù)據(jù)傳輸,因?yàn)樗强焖偾矣行У。但是,如果需要避免意外修改原始對象,則應(yīng)使用深拷貝。
以下是一些有關(guān)何時(shí)使用淺拷貝和深拷貝的準(zhǔn)則:
機(jī)器學(xué)習(xí):神經(jīng)網(wǎng)絡(luò)構(gòu)建(下)
閱讀華為Mate品牌盛典:HarmonyOS NEXT加持下游戲性能得到充分釋放
閱讀實(shí)現(xiàn)對象集合與DataTable的相互轉(zhuǎn)換
閱讀鴻蒙NEXT元服務(wù):論如何免費(fèi)快速上架作品
閱讀算法與數(shù)據(jù)結(jié)構(gòu) 1 - 模擬
閱讀5. Spring Cloud OpenFeign 聲明式 WebService 客戶端的超詳細(xì)使用
閱讀Java代理模式:靜態(tài)代理和動(dòng)態(tài)代理的對比分析
閱讀Win11筆記本“自動(dòng)管理應(yīng)用的顏色”顯示規(guī)則
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]
湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2025 haote.com 好特網(wǎng)