永发信息网

转:C#之深拷贝和浅拷贝的区别

答案:1  悬赏:0  手机版
解决时间 2021-03-29 09:36
转:C#之深拷贝和浅拷贝的区别
最佳答案
深拷贝和浅拷贝区别如下:
1)浅拷贝:简单的复制堆栈的内容,对于值类型,堆栈内容是其值本身,对于引用类型,其值为托管堆的内存地址,对拷贝的对象的修改会反映到被拷贝的对象。
2)深拷贝:不管是值类型还是引用类型,其值均为真正的副本,对于值类型,堆栈内容是其值本身,对于引用类型,其值为托管堆的保存的具体的值(这个动作称为克隆),是克隆对象的值,不是它的内存地址,对拷贝的对象的修改不会反映到被拷贝的对象。深拷贝本质上就是软件设计模式里的原型模式。与C#对应的接口是ICloneable
class Foo:ICloneable{
        public String Bar{get;set;}
        
        public override string ToString(){
            return "Bar="+this.Bar;
        }

        public object Clone(){
            return new Foo() { Bar = this.Bar };
        }
}
static void Main(string[] args){
        Console.WriteLine("===========浅拷贝=============");
        Foo foo = new Foo() { Bar = "Old Value" };
        Foo copy = foo;
        Console.WriteLine("浅拷贝修改副本前:"+foo);
        copy.Bar = "New Value"; // 修改副本会反映到被拷贝的对象
        Console.WriteLine("浅拷贝修改副本后:" + foo);

        Console.WriteLine("===========深拷贝=============");

        Foo foo2 = new Foo() { Bar = "Old Value" };
        Foo copy2 = foo2.Clone() as Foo;
        Console.WriteLine("深拷贝修改副本前:" + foo);
        copy2.Bar = "New Value";// 修改副本不会反映到被拷贝的对象
        Console.WriteLine("深拷贝修改副本后:" + foo);

        Console.ReadKey(true);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
3dmax一个模型里的材质想用在另一个模型里(
怎样养野生蚯蚓
林萧和宫洺在一起了最后?
谢谢 哪位大神知道九味紫葡养生茶能治亚健康
晚上做萝同时梦见三个己古的老人
32盎司等于多少牛奶
刚下树的核桃可以马上盘玩吗?
12V50A的蓄电池可以用在电动车上吗?
41题那道不定积分怎么求呢 求大神解答
那里有废旧拉丝出售
橡胶混炼胶为什么要
至此一生,钟爱一人的意思
搜2017年5月12日的微信聊天记录
为什么说地衣和苔藓植物是大自然的拓荒者
变压器容量不够会有什么现象
推荐资讯
新晃侗族自治县发展和改革委员会地址在哪,我
算命先生说的话到底准不准?
去年快过年的时候跟朋友合伙开店-当初说好一
神武95带什么法宝宝
我昨天夜班,下午两点上班请假一天,公司昨天
英雄联盟有没有可以查战绩然后放打完的回放的
营养土培养土泥炭土有什么区别 盆栽草莓用哪
1L长富巴氏鲜奶一盒多少钱?
单选题蕨类植物在结构上比苔藓植物高等,主要
辛格的翻译是:什么意思
ecvt变速箱和爱信4速有什么区别
连续涨30个10%是多少?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?