C#浅拷贝与深拷贝测试
1.浅拷贝与深拷贝
浅拷贝:只复制对象的基本类型,对象类型,仍属于原来的引用.
深拷贝:不紧复制对象的基本类,同时也复制原对象中的对象.就是说完全是新对象产生的.
2.浅拷贝与深拷贝的区别
浅拷贝是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的引用型字段则指复制它的一个引用到目标对象。如果改变目标对象中引用型字段的值他将反映在原始对象中,也就是说原始对象中对应的字段也会发生变化。
深拷贝与浅拷贝不同的是对于引用的处理,深拷贝将会在新对象中创建一个新的和原始对象中对应字段相同(内容相同)的字段,也就是说这个引用和原始对象的引用是不同的,我们在改变新对象中的这个字段的时候是不会影响到原始对象中对应字段的内容。
3.浅拷贝与深拷贝测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | public class TestClass { public TestClass() { this .Num = 1; this .Remark = "r" ; this .Data = new Data { Name = "a" , SortNum = 1 }; } public int Num { get ; set ; } public string Remark { get ; set ; } public Data Data { get ; set ; } //浅拷贝 public TestClass Clone() { return (TestClass) this .MemberwiseClone(); } //深拷贝 public TestClass DeepClone() { TestClass t = new TestClass(); t.Num = this .Num; t.Remark = this .Remark; t.Data = new Data { Name = this .Data.Name, SortNum = this .Data.SortNum }; return t; } } public class Data { public string Name { get ; set ; } public int SortNum { get ; set ; } } |
测试代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | static void Main( string [] args) { TestClass t1 = new TestClass(); TestClass t2 = t1.Clone(); TestClass t3 = t1.DeepClone(); t1.Num = 2; t1.Remark = "r2" ; t1.Data.SortNum = 2; t1.Data.Name = "b" ; Console.WriteLine( "t1 num:{0} remark:{1} name:{2} sortnum:{3}" , t1.Num,t1.Remark, t1.Data.Name, t1.Data.SortNum); Console.WriteLine( "t2 num:{0} remark:{1} name:{2} sortnum:{3}" , t2.Num,t2.Remark, t2.Data.Name, t2.Data.SortNum); Console.WriteLine( "t3 num:{0} remark:{1} name:{2} sortnum:{3}" , t3.Num,t3.Remark, t3.Data.Name, t3.Data.SortNum); Console.ReadLine(); } |
测试结果:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用