您的位置:首页 > 其它

浅析深拷贝,浅拷贝,引用类型直接拷贝

2008-10-10 16:01 211 查看
引用类型直接拷贝:内存中存在两份引用,但是真实数据只有一份,两份引用指向同一份真实数据

浅拷贝:如果字段是值类型的,则对该字段执行逐位复制,如果字段是引用类型(work),则复制引用但不复制引用的对象

深拷贝:完全生成不同的对象,各个对象里面的字段(不管是值类型还是引用类型)在内存中占据不同的位置

代码:

Code

#region 引用类型直接拷贝

//内存中存在两份引用,但是真实数据只有一份,两份引用指向同一份真实数据

Resume ResumeA = new Resume();

ResumeA.SetInfo(18,"EngineA","CompanyA");

Resume ResumeB = ResumeA;

ResumeB.SetInfo(19,"EngineB","CompanyB");

ResumeA.Display();

ResumeB.Display();

//expected result:

//EngineB : 19,CompanyB

//EngineB : 19,CompanyB

#endregion

#region 浅拷贝

//如果字段是值类型的,则对该字段执行逐位复制,如果字段是引用类型(work),则复制引用但不复制引用的对象

Resume ResumeC = new Resume();

ResumeC.SetInfo(20,"EngineC","CompanyC");

Resume ResumeD = (Resume)ResumeC.Clone();

ResumeD.SetInfo(21,"EngineD","CompanyD");

ResumeC.Display();

ResumeD.Display();

//expected result :

//EngineC : 20,CompanyD

//EngineD : 21,CompanyD

#endregion

#region 深拷贝

//完全生成不同的对象,各个对象里面的字段(不管是值类型还是引用类型)在内存中占据不同的位置

Resume ResumeE = new Resume();

ResumeE.SetInfo(22,"EngineE","CompanyE");

Resume ResumeF = (Resume)ResumeE.Clone();

ResumeF.SetInfo(23,"EngineF","CompanyF");

ResumeE.Display();

ResumeF.Display();

//expected result :

//EngineE : 22,CompanyE

//EngineF : 23,CompanyF

#endregion
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐