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

结构体的浅复制和深复制

阅读更多

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

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

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

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

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

显示结果:

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

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

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

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

分享到:
评论

相关推荐

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

    当我们需要复制一个结构体或类实例时,通常有两种方式:浅拷贝和深拷贝。在本例中,我们关注的是浅拷贝,也就是内存拷贝。浅拷贝会直接复制对象在内存中的字节序列,而不考虑其内部可能存在的指针或其他复杂结构。这...

    C#中的浅拷贝和深拷贝

    根据复制的方式不同,可以分为浅拷贝(Shallow Copy)和深拷贝(Deep Copy)。这两种复制方式各有其特点和适用场景。 #### 值类型变量与引用类型变量 在深入讨论浅拷贝与深拷贝之前,我们需要先理解C#中的两种基本...

    如何使用类库中的结构体

    类库也可能提供了结构体的复制构造函数和赋值运算符,以支持深拷贝或浅拷贝,这取决于结构体是否包含动态分配的资源。 总结一下,正确使用类库中的结构体需要理解其定义、如何实例化和初始化结构体,以及如何与类库...

    复制copy的应用(C#代码编写)

    复制不仅可以用于简单数据类型的拷贝,还可以涉及到复杂对象的深拷贝和浅拷贝。下面我们将深入探讨C#中复制操作的相关知识点,并提供相关的代码示例。 ### 1. 基本类型复制 对于C#中的基本数据类型(如int、double...

    copy 深/浅

    "深拷贝"和"浅拷贝"是两种不同的复制策略,它们在内存管理和对象复制方面有着显著的区别。本篇文章将深入探讨这两种拷贝方式,并通过具体的例子和内存分析来阐述它们的工作原理。 首先,我们理解一下浅拷贝...

    浅-深复制:用于浅和深复制阵列的程序

    总结来说,浅复制和深复制在处理数组和复杂数据结构时有各自的适用场景。浅复制适用于不可变对象或对原始数据无修改需求的情况,而深复制适用于需要独立副本的情况,尤其是涉及到动态内存分配和复杂数据结构时。在...

    c代码-测试结构体赋值

    在编程实践中,结构体赋值是一个常见的操作,涉及到创建、初始化和复制结构体变量。让我们深入探讨一下这个主题。 首先,我们要理解如何声明和初始化结构体。在`main.c`文件中,可能包含了以下代码段: ```c #...

    易语言解决浅复制源码-易语言

    3. 引用类型和值类型的区别,理解浅复制和深复制的原理。 4. 如何在易语言中编写自定义函数,实现对象的深复制。 5. 遍历结构体或类的成员,逐一复制的方法。 6. 面向对象编程中的拷贝构造函数和赋值运算符重载,...

    探讨 [源代码]C#类与结构体究竟谁快

    结构体的拷贝通常是浅拷贝,即直接复制内存,而类的拷贝是深拷贝,会创建新的对象。因此,在频繁创建和拷贝对象的场景下,结构体可能有速度优势。 在方法调用上,类的方法调用涉及到虚函数表查找,这在多层继承链中...

    C/C++ 浅拷贝和深拷贝的实例详解

    C/C++ 浅拷贝和深拷贝的实例详解 深拷贝是指拷贝对象的具体内容,而内存地址是自主分配的,拷贝结束之后,两个对象虽然存的值是相同的,但是内存地址不一样,两个对象也互不影响,互不干涉。 浅拷贝就是对内存地址...

    ASP.NET深度复制和浅度复制分析

    ***中深度复制和浅度复制是编程中常见的概念,尤其是在涉及到对象复制和内存管理的场景中。为了理解这两个概念,首先我们需要明确值类型和引用类型的区别。 值类型直接存储其数据,而在.NET框架中包括了所有的基本...

    Copystruct

    了解如何正确地复制结构体是编程中的一项基本技能,特别是在处理复杂的数据结构和内存管理时。错误的复制可能会导致内存泄漏、数据损坏或者程序行为不符合预期。因此,开发者需要根据具体情况选择合适的复制策略,...

    cs代码-C# 结构体学习

    2. **默认的复制行为**:由于结构体是值类型,当传递或赋值给新变量时,会进行浅复制,即复制结构体的所有字段的值。类则是深复制,即复制对对象的引用,而不是对象本身。 3. **大小和性能**:结构体通常比类小,...

    cpp代码-测试结构体赋值

    结构体赋值不仅仅是浅拷贝,这意味着如果结构体成员包含指针或其他可变对象,赋值操作会复制指针,而不是指针所指向的对象。因此,如果想要实现深拷贝,可能需要重载赋值运算符(`operator=`)。 `README.txt`文件...

    复制组件-易语言

    首先,我们要理解在易语言中,数据复制可以分为浅复制和深复制两种方式。浅复制只是复制了对象的引用,而深复制则是复制了对象的所有属性和内容,包括嵌套的对象。在处理复杂的数据结构时,深复制尤其重要,以防止原...

Global site tag (gtag.js) - Google Analytics