zoukankan      html  css  js  c++  java
  • 什么是深拷贝和浅拷贝以及如何实现深拷贝

    什么是浅拷贝?

    浅拷贝是指copy的对象和被copy的对象它们公用一个实体,也就是同时指向内存中的一个相同的地址。比如,有的地方把太阳叫“太阳”,而有的地方把太阳叫做“日头”,不管是“太阳”还是“日头”,指的都是太阳这个物体,如果某天“太阳”缺了一块儿(只说如果),那么“日头”也肯定会缺一块儿,因为它们是指的是同一物体,只是称呼不同。

     什么是深拷贝?

    深拷贝是指copy的对象和被copy的对象两个都是独立的、互不影响的。就像玩具厂生产出来的玩具,它们是一模一样的,都可以被买走,但是又是谁也不影响谁。

    * 一般来讲,值类型的copy都属于深拷贝,而引用类型copy都属于浅拷贝(string类型除外)。

    如何实现深拷贝?

    克隆的方法网上有很多,就不多说了。这里给大家推荐一种非常简单、易懂而且安全实用的方法来实现深拷贝,欢迎大家指出不足^_^

     public class User
        {
            string name;
    
            public string Name  //姓名
            {
                get { return name; }
                set { name = value; }
            }
    
            int age;
    
            public int Age    //年龄
            {
                get { return age; }
                set { age = value; }
            }
    
            bool gender;
    
            public bool Gender   //性别
            {
                get { return gender; }
                set { gender = value; }
            }
    
    
            public User Copy(User user)  //深拷贝方法
            {
                //创建一个新的User对象
                User newUser = new User();
    
                //将你要Copy的User对象的所有属性赋值给新建的User对象
                newUser.Name = user.Name;
                newUser.Age = user.Age;
                newUser.Gender = user.Gender;
    
                //将赋值后的User对象return,这样你就得到了一个和你要Copy的User对象一模一样的新的User对象
                return newUser;
            }
        }

         

    测试代码:

     class Program
        {
            static void Main(string[] args)
            {
                //创建一个名为张三的User对象
                User user = new User();
                user.Age = 18;
                user.Name = "张三";
                user.Gender = false;
    
    
    
                //将张三这个User对象Copy给newUser
                User newUser = user.Copy(user);
    
    
    
                //改变张三这个对象的各个属性
                user.Name = "李四";
                user.Age = 20;
                user.Gender = true;
    
    
    
                //输出张三的信息
                Console.WriteLine(user.Name);
                Console.WriteLine(user.Age);
                Console.WriteLine(user.Gender);
    
                Console.WriteLine();
    
    
    
                //输出newUser的信息
                Console.WriteLine(newUser.Name);
                Console.WriteLine(newUser.Age);
                Console.WriteLine(newUser.Gender);
    
                Console.ReadLine();
            }
        }
  • 相关阅读:
    13-14学年寒假集训
    kafka 并发数配置过程中踩到的坑 InstanceAlreadyExistsException
    MongoDB运行状态、性能监控,分析
    linux运维相关命令收集
    谷歌浏览器文字显示不正常
    数据库sql优化
    一个字符串在另一个字符串中出现的次数
    多线程下载文件
    internet资源下载的断点续传
    URL如何通过Proxy代理访问Internet资源
  • 原文地址:https://www.cnblogs.com/xinyueBlog/p/6179096.html
Copyright © 2011-2022 走看看