• 浅度复制VS深度复制


    对于引用类型的复制,通过MemberwiseClone()复制的只是引用,即myclone1和myclone2的myContent是相同的对象实例。一个改变值,另一个也会改变。因为myContent.Val是公共字段。

    值对象则没有这种顾虑

    PS:感觉ICloneable 接口并没有什么用,完全可以自己写方法。毕竟ICloneable里面只有一个Clone方法。

    代码如下:

     1    class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             Cloner myclone1 = new Cloner(5);
     6 
     7             // 浅度复制
     8             Cloner myclone2 = (Cloner)myclone1.GetCopy();
     9             Console.WriteLine("myclone2.myContent.Val:" + myclone2.myContent.Val);
    10             myclone1.myContent.Val = 10; // 修改了myclone1,myclone2也会变
    11             Console.WriteLine("myclone2.myContent.Val:" + myclone2.myContent.Val);
    12 
    13             // 深度复制
    14             Cloner myclone3 = (Cloner)myclone1.DeepClone();
    15             Console.WriteLine("myclone3.myContent.Val:"+myclone3.myContent.Val);
    16             myclone1.myContent.Val = 15; // 修改了myclone1,myclone2不会变
    17             Console.WriteLine("myclone3.myContent.Val:" + myclone3.myContent.Val);
    18 
    19             Console.ReadKey();
    20         }
    21     }
    22 
    23     public class Content
    24     {
    25         public int Val;
    26     }
    27 
    28     public class Cloner //:ICloneable
    29     {
    30         public Content myContent = new Content();// 引用类型才行,值类型不行
    31 
    32         public Cloner(int newVal)
    33         {
    34             myContent.Val = newVal;
    35         }
    36 
    37         public object GetCopy() // 浅度复制
    38         {
    39             return MemberwiseClone();// 创建浅表副本
    40         }
    41 
    42         public object DeepClone() // 深度复制
    43         {
    44             Cloner clonedCloner = new Cloner(myContent.Val);
    45             return clonedCloner;
    46         }
    47     }

     运行结果:

  • 相关阅读:
    科学开源项目 : 建立一个 新的 光衍射 模型
    光不是电磁波 摩擦力不是电磁力
    收录一篇 贝尔不等式 的 文章
    数学家 程序员 哲学家 艺术家
    论 数学 的 工具性
    数学 怎么用?
    随便说说 广义相对论 的 时间膨胀
    逻辑物理学 : 光子 有 质量 吗 ?
    我对 “光子有质量 , 引力对光子有作用” 存疑
    收录一些 高等数学 的 文章
  • 原文地址:https://www.cnblogs.com/shelly0307/p/7614365.html
Copyright © 2020-2023  润新知