黑马程序员技术交流社区

标题: 深拷贝与浅拷贝 [打印本页]

作者: 王晨    时间: 2013-1-3 23:22
标题: 深拷贝与浅拷贝
今天知道刚刚俩名词:深拷贝和浅拷贝,但是不知道他俩到底是什么以及如何在.NET中实现深拷贝和浅拷贝吗??
大家有知道的,麻烦给详细的讲讲!!谢谢了!

作者: 罗志强    时间: 2013-1-10 10:36
本帖最后由 ShowStyle 于 2013-1-10 11:14 编辑

这个问题我刚好前几天看书看到了,

我来给你讲解下,希望你能明白,

咱们都知道,一个对象,有引用类型和值类型,对吧,如果你要复制一个对象,如果是引用类型的话,例

public class person
    {
     public  string Name;
     public  int     Age;
    }
    class Program
    {
        //9、 让用户输入一句话,找出所有e的位置。
        static void Main(string[] args)
        {
            person p1 = new person();
            p1.Name = "小强";
            p1.Age = 20;
            person p2 = new person();
            p2 = p1;
            p1.Age = 18;
            p1.Name = "张三";
            Console.WriteLine("p1的名字{0},p1的年纪{1}。p2的名字{2},p2的年纪{3}", p1.Name, p1.Age, p2.Name, p2.Age);
            Console.ReadKey();
        }
    }

这个例子你可以看出,p2其实和p1用的是同一块个内存地址,p1的指针和p2的指针都指向同一块内存,所以打印出来的是一样的值。所以p1或者p2只要更改他们的字段,两个都会跟着变,

深复制的话,就好像值类型的复制一样的   
int i=10;
int b=i;
i=5;
输出的话  i=5;  b=10;

深复制实现方法
public class person : ICloneable
    {
        public string Name;
        public int Age;
        public object Clone()
        {
            person p = new person();
            p.Name = this.Name;
            p.Age = this.Age;
            return p;
        }
    }

    class Program
    {
        //9、 让用户输入一句话,找出所有e的位置。
        static void Main(string[] args)
        {
            person p1 = new person();
            p1.Name = "小强";
            p1.Age = 20;
            person p2 = new person();
            p2 = p1.Clone() as person;
            p1.Name = "张三";
            p1.Age = 10;

            Console.WriteLine("p1的名字{0},p1的年纪{1}。p2的名字{2},p2的年纪{3}", p1.Name, p1.Age, p2.Name, p2.Age);
            Console.ReadKey();
        }
    }

微软提供一个ICloneable 接口   要深复制,必须实现其Clone()方法,

希望你能明白   我也是刚学到,顺便要报读,来拿点技术分,





作者: 王晨    时间: 2013-1-10 18:53
ShowStyle 发表于 2013-1-10 10:36
这个问题我刚好前几天看书看到了,

我来给你讲解下,希望你能明白,

谢谢你的 讲解,我正在看!
作者: 罗志强    时间: 2013-1-11 08:34
王晨 发表于 2013-1-10 18:53
谢谢你的 讲解,我正在看!

呵呵!很多知识点!视频里面没有详解,很多只是点了一下,欲知详细信息,还得自己翻书
作者: 王晨    时间: 2013-1-11 12:56
ShowStyle 发表于 2013-1-11 08:34
呵呵!很多知识点!视频里面没有详解,很多只是点了一下,欲知详细信息,还得自己翻书 ...

嗯,我再研究研究




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2