`
isiqi
  • 浏览: 16075414 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

结构体的浅复制和深复制

阅读更多

浅复制,指在创建一个对象或结构的副本时,对其值类型字段直接复制值,引用类型字段只复制引用(地址)。

深复制,与浅复制不同的是,对引用类型字段,会创建新的引用,使用新的引用(地址)。

通常直接赋值操作是浅复制操作,若使用深复制,应该实现ICloneable操作,写Clone方法,利用Object.MemberwiseClone方法浅复制后,需要手动编写对其引用对象进行创建新的对象深复制副本。

结构体也是如此,虽然是值类型,若其中包含引用类型字段,想产生一个深复制版本,必须手动实现。

下面是一个测试结构体浅复制的代码:

显示结果:

测试代码中前三个TEST,使s2=s1操作后,s2得到了s1的一个浅复制版本。

TEST 4利用System.Linq提供的扩展方法ToArray创建了数组的一个副本,

使s2是s1的深复制版本,所以演示中对s2的任何修改不会影响s1。

注意:使用ToArray方法,根据情况,增加源数据对象是否为null的判断。

分享到:
评论

相关推荐

    快速复制结构体变量和类实例

    用内存拷贝,快速复制结构体变量和类的实例,与结构体、类的成员变量无关

    TIA博途中复制存储区和结构体数据的几种方法.docx

    TIA博途中复制存储区和结构体数据的几种方法

    结构体变量的复制与比较

    本文是关于结构体变量的复制与比较。

    Delphi 嵌套结构体流化,复制,释放

    结构体流化,复制,释放(含嵌套结构体指针,普通指针,动态数组(string,指针,结构体含指针),string,anstring等情况)(基本解决内存泄漏,非法内存访问问题). 上一个资源没完成动态数组,这个完成了,并跟踪了...

    VC++结构体成员变量和方法

    VC++结构体成员变量和方法,实现结构体成员调用

    file结构体和inode结构体

    (1)struct file结构体定义在include/linux/fs.h中定义。文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个...在内核创建和驱动源码中,struct file的指针通常被命名为file或filp。如下所示

    结构体和XML互转

    1、结构体转XML:定义结构体,调用StructFillXml类的相关函数,可将结构体直接转换成XML字符串,支持嵌套结构体,示例中为4层结构体嵌套; 2、XML转结构体:这个不能直接转化,根据结构体定义,可生成XML转结构体的...

    C语言 结构体和指针详解及简单示例

    本文主要介绍C语言 结构体和指针,这里整理了相关资料,并附示例代码和实现结果,以便大家学习参考,希望能帮助学习C语言的朋友

    串口编程函数和结构体

    串口编程函数和结构体串口编程函数和结构体

    计算机结构体

    结构体

    sizeof(结构体)和内存对齐

    sizeof(结构体)和内存对齐 sizeof(结构体)和内存对齐 sizeof(结构体)和内存对齐 sizeof(结构体)和内存对齐

    第8讲-结构体与结构体数组

    讲解区分结构体与结构体数组:结构体的引出、结构体变量的定义和引用、结构体数组

    C#中byte数组和c++结构体的转换

    在写C#TCP通信程序时,发送数据时,只能发送byte数组,处理起来比较麻烦不说,如果是和c++等写的程序通信的话,很多的都是传送结构体,在VC6.0中可以很方便的把一个char[]数组转换为一个结构体,而在C#却不能直接把...

    第十一章 结构体和.ppt

    第十一章 结构体和

    网络编程之发送结构体.zip

    网络编程之发送结构体网络编程之发送结构体网络编程之发送结构体网络编程之发送结构体网络编程之发送结构体网络编程之发送结构体网络编程之发送结构体网络编程之发送结构体网络编程之发送结构体网络编程之发送结构体...

    一种快速清空结构体的方法

    以下的函数即是用于清空结构体的,需要传入的两个参数分别为结构体的起始地址和结构体的长度。 void Clear(unsigned char *Ptr, int Size ){ while(Size!=0) { *Ptr++ = 0; Size --; }} 函数的调用如下。 ...

    C++中 结构体和类的区别

    学习了C++的面向对象,最常见的和写的就是类结构体,这篇文章主要简单介绍一下结构体和类的区别。  首先类是C++中面向对象独有的,但是C和C++中都有结构体,下面我们来看一下C和C++中结构体的区别。这里主要从封装...

    OPCUA读写结构体示例

    OPCUA读写复杂结构体

Global site tag (gtag.js) - Google Analytics