问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

net中浅拷贝和深拷贝有什么区别,分别如何实现

提问网友 发布时间:2022-04-23 05:33
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
1个回答
热心网友 回答时间:2022-04-20 13:06
您好,
浅拷贝:指对象的字段被拷贝,而字段引用的对象不会被拷贝,拷贝对象和原对象仅仅是引用名称有所不同,但是它们共用一份实体。对任何一个对象的改变,都会影响到另外一个对象。大部分的引用类型,实现的都是浅拷贝,引用类型对象之间的赋值,就是复制一个对象引用地址的副本,而指向的对象实例仍然是同一个。
深拷贝:指对象的子段被拷贝,同时字段引用的对象也进行了拷贝。深拷贝创建的是整个源对象的结构,拷贝对象和原对象相互独立,不共享任何实例数据,修改一个对象不会影响到另一个对象。值类型之间的赋值操作,执行的就是深拷贝。
基本概念之参考代码:
代码如下:
class Program
{
static void Main(string[] args)
{
Student s1 = new Student("li", 23);

//浅拷贝
Student s2 = s1;
s2.Age = 27;
s1.ShowInfo();//li's age is 27

//深拷贝
int i = 12;
int j = i;
j = 22;
Console.WriteLine(i);//12

Console.Read();
}
}

class Student
{
public string Name;
public int Age;

public Student(string name, int age)
{
Name = name;
Age = age;
}

public void ShowInfo()
{
Console.WriteLine("{0}'s age is {1}", Name, Age);
}
}
分析:
在上例中,实例s2对s1进行了浅拷贝,对s2中的Age字段进行更改,继而影响实例s1中的Age字段。
深拷贝中,仅仅是值类型间简单的赋值,对“j”做出的更改不会更改“i”的值。
深浅拷贝的实现:
代码如下:
public object Clone()
{
return this.MemberwiseClone();
}
MemberwiseClone:创建一个浅表副本。过程是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型,则对该字段执行逐位复制,如果字段是引用类型,则复制引用但不复制引用对象。
代码如下:
class Program
{
static void Main(string[] args)
{
ClassA ca = new ClassA();
ca.value = 88;
ClassA ca2 = new ClassA();
ca2 = (ClassA)ca.Clone();
ca2.value = 99;
Console.WriteLine(ca.value + "-----" + ca2.value);//88---99

ClassB cb = new ClassB();
cb.Member.value = 13;

ClassB cb2 = (ClassB)cb.Clone();
cb2.Member.value = 7;
Console.WriteLine(cb.Member.value.ToString() + "------" + cb2.Member.value.ToString());//浅拷贝:7---7 深拷贝:13----7

Console.Read();
}
}

public class ClassA : ICloneable
{
public int value = 0;

public object Clone()
{
return this.MemberwiseClone();
}
}

public class ClassB : ICloneable
{
public ClassA Member = new ClassA();

public object Clone()
{
//浅拷贝
return this.MemberwiseClone();

//深拷贝
ClassB obj = new ClassB();
obj.Member = (ClassA)Member.Clone();
return obj;
}
}

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

相关推荐
  • 什么是js深拷贝和浅拷贝及其实现方式

    什么是js深拷贝和浅拷贝及其实现方式

    什么是js深拷贝和浅拷贝及其实现方式:今天来给大家说一下JS的js深拷贝和浅拷贝,它们有什么区别,有什么作用呢?下面给大家举例说明一下。var m = { a: 10, b: 20 }var n = m;n.a = 15;// 这时m.a的值是多少m.a会输出15,因为这是浅拷贝,n和m指向的是同一个堆,对象复制只是复制的对象的引用。
    查看详情
  • js中浅拷贝与深拷贝的简单介绍以及实现方法

    js中浅拷贝与深拷贝的简单介绍以及实现方法

    js中浅拷贝与深拷贝的简单介绍以及实现方法:本篇文章给大家带来的内容是关于js中浅拷贝与深拷贝的简单介绍以及实现方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。首要声明:什么数据类型才有拷贝一说? 毋庸置疑,数组和对象[Array&Object]浅拷贝:* --- 拷贝数据的方
    查看详情
python的复制,深拷贝和浅拷贝的区别 转:C#之深拷贝和浅拷贝的区别 深拷贝和浅拷贝怎样理解(通俗具体点儿) 淘宝上出售的那些OFFICE 2010 的注册码是怎么得到的?高分!!! 淘宝上买的office2016激活码安全么 淘宝office激活码后缀 淘宝有很多卖office 密匙的,直接可以联网激活,请问他们都是通过什么方式弄来的?知道内幕的说一 淘宝上几块钱的office激活密钥靠谱吗 在淘宝上买office365激活码安全吗 淘宝网上的office密钥能用的住吗 怎么激活office?产品密钥 怎样在淘宝上买Office 2016 激活码? 我在网上买的office2016的密钥怎么用不了??怎么回事 买电脑送的office密钥在哪 淘宝上卖office密钥的人从哪里来的密钥 淘宝上卖的office激活码可信吗 淘宝上几块钱的office激活密钥靠谱吗?? 电脑没有安装微软Office系列软件,只买了个密钥,怎么安装? 淘宝上的office激活码怎么用 淘宝上买的office密钥靠谱吗,会不会存在和365一样泄密的隐患? Python中的赋值,浅拷贝和深拷贝的区别 C#对象的浅拷贝(浅表复制)和深拷贝(深度复制)是什么意思? 怎么跳过吃鸡人脸识别? 菜鸡软件如何跳过实名认证,直接玩游戏? 如何不让吃鸡写姓名和身份证才进入游戏? 吃鸡如何跳过游戏人脸验证环节? 吃鸡实名认证怎么解除未成年呢? 吃鸡可以不用实民认证 可以加速绝地求生国际服的加速器不用实名 apple watch可以脱离iPhone单独使用吗? 如果捡到一箱金条,怎么处理好 捡到金子回倒霉吗?怎么样化解啊? 黄金吊坠掉了两三个月又捡回来了好不好 捡到黄金是什么预兆? 我在山上捡到很多黄金银子该怎么办。会被关进大牢里面吗? 河里捡到的黄金怎么处理有相关的法律知识? 捡到黄金代表什么运势 捡到黄金首饰运气好不好? 突然捡到一斤黄金,咋处理! 捡到黄金戒指是什么预兆
Top