• 深拷贝、浅拷贝、直接赋值


    使用直接赋值后两个对象就完全一样,随着改变一个对象的值另一个对象的值也随之改变。

    浅拷贝,对象中的值类型互补影响,但是引用类型(string虽然是引用类型但特殊存在类值类型)随着一个对象的值改变另一个也会改变。

    深拷贝,两个对象完全独立互补影响

     1 class Program
     2     {
     3       
     4               public  class Person{
     5 
     6             public int age;
     7 
     8             public string name;
     9             public Object Clone() {
    10                 return this.MemberwiseClone();
    11             }
    12 
    13             }
    14 
    15             public class ClassA : ICloneable
    16             {
    17 
    18                 public string classname;
    19 
    20                 public Person person=new Person();
    21 
    22                 public Object Clone()
    23                 {
    24 
    25                     return this.MemberwiseClone();//潜拷贝
    26                 }
    //深拷贝
    27 public Object DeepClone() 28 { 29 ClassA cloneA = new ClassA(); 30 cloneA.classname = this.classname; 31 //cloneA.person.age = this.person.age; 32 //cloneA.person.name = this.person.name; 33 cloneA.person = (Person)this.person.Clone(); 34 return cloneA; 35 } 36 37 } 38 39 static void Main(string[] args) 40 { 41 42 43 ClassA class1=new ClassA(); 44 45 46 Person p=new Person(); 47 48 p.age=18; 49 50 p.name="jack"; 51 52 class1.person=p; 53 54 class1.classname = "班级1"; 55 56 ClassA class2 = class1; 57 ClassA class3 = (ClassA)class1.Clone(); 58 ClassA class4=(ClassA)class1.DeepClone(); 59 Console.WriteLine("class1---"+class1.classname + "---" + class1.person.name +"----"+ class1.person.age+"/n"); 60 Console.WriteLine("直接赋值---"+class2.classname + "---" + class2.person.name +"----"+ class2.person.age+"/n"); 61 Console.WriteLine("潜拷贝---"+class3.classname + "---" + class3.person.name +"----"+ class3.person.age+"/n"); 62 Console.WriteLine("深拷贝---"+class4.classname + "---" + class4.person.name +"----"+ class4.person.age+"/n"); 63 Console.WriteLine("变跟后"); 64 class1.classname = "班级变更"; 65 class1.person.age = 22; 66 class1.person.name = "Lee"; 67 Console.WriteLine("class1---"+class1.classname + "---" + class1.person.name +"----"+ class1.person.age+"/n"); 68 Console.WriteLine("直接赋值---"+class2.classname + "---" + class2.person.name +"----"+ class2.person.age+"/n"); 69 Console.WriteLine("潜拷贝---"+class3.classname + "---" + class3.person.name +"----"+ class3.person.age+"/n"); 70 Console.WriteLine("深拷贝---"+class4.classname + "---" + class4.person.name +"----"+ class4.person.age+"/n"); 71 Console.Read(); 72 73 } 74 75 }

    我们来看下输出结果

    潜拷贝后值班级名字不受影像但是引用类型person随着改而值一起出现了变化从jace变成了lee。

    而深拷贝并没有变化。直接赋值后两对象完全等同。

  • 相关阅读:
    SharedPreferences(转)
    android操作XML的几种方式(转)
    adb 卸载APP命令和杀死APP命令
    Android判断App是否在前台运行(转)
    Java中的Timer和TimerTask在Android中的用法(转)
    Android: 启动另外的APP及传递参数(转)
    BroadcastReceiver应用详解(转)
    Android---让你的APK程序开机自动运行(转)
    adb shell 命令详解(转)
    C#串口介绍以及简单串口通信程序设计实现
  • 原文地址:https://www.cnblogs.com/xuyufeng/p/4647347.html
Copyright © 2020-2023  润新知