A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王晨 高级黑马   /  2013-1-3 23:22  /  2096 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天知道刚刚俩名词:深拷贝和浅拷贝,但是不知道他俩到底是什么以及如何在.NET中实现深拷贝和浅拷贝吗??
大家有知道的,麻烦给详细的讲讲!!谢谢了!

4 个回复

倒序浏览
本帖最后由 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()方法,

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




回复 使用道具 举报
ShowStyle 发表于 2013-1-10 10:36
这个问题我刚好前几天看书看到了,

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

谢谢你的 讲解,我正在看!
回复 使用道具 举报
王晨 发表于 2013-1-10 18:53
谢谢你的 讲解,我正在看!

呵呵!很多知识点!视频里面没有详解,很多只是点了一下,欲知详细信息,还得自己翻书
回复 使用道具 举报
ShowStyle 发表于 2013-1-11 08:34
呵呵!很多知识点!视频里面没有详解,很多只是点了一下,欲知详细信息,还得自己翻书 ...

嗯,我再研究研究
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马