C#中深度复制和浅度复制详解

本文章主要是讲解C# 语言编程中,深度复制和浅度复制,下面我将通过一个实例进行讲解。在实例开发之前,我们得先知道深度复制是什么和浅度复制是什么,它们之间的区别又是什么,下面将为大家一一揭晓。

1.深度复制是什么?
深度复制就是引用类型的复制。

2.浅度复制是什么?
浅度复制是值类型的复制。

以下是C#中深度复制和浅度复制的实例代码引用片段:

using System;
using System.Collections.Generic;
using System.Text;
namespace Test
{
  public class Content
  {
    public int val;
  }

  //此处若是深度复制才继承ICloneable接口
  //public class Cloner : ICloneable
  public class Cloner
  {
    public Content MyContent = new Content();
    public Cloner(int newVal)
    {
      MyContent.val = newVal;
    }

    //浅度复制
    //使用System.Object.MemberwiseClone()进行浅度复制,使用getCopy方法.
    public object getCopy()
    {
      return MemberwiseClone();
    }

    //深度复制:
    public object clone()
    {
      Cloner clonedCloner = new Cloner(MyContent.val); //此处是实例化一个对象
      return clonedCloner;
    }
  }
}

//主函数
using System;
using System.Collections.Generic;
using System.Text;
namespace Test
{
  class Program
  {
    static void Main(string[] args)
    {
      Cloner mySource = new Cloner(5);
      Cloner myTarget = (Cloner)mySource.getCopy();//深度为cloner
      Console.WriteLine("MyTarget.Mycontent.Val={}",myTarget.MyContent.val);
      mySource.MyContent.val = 2;
      Console.WriteLine("MyTarget.Mycontent.Val={}", myTarget.MyContent.val);
    }
  }
}

通过简单的实例开发,大家对深度复制和浅度复制是不是有了大概的了解了,以后再有相关的内容介绍会在和大家分享哦

(0)

相关推荐

  • C#复制和深度复制的实现方法

    深度复制与浅表复制的区别在于,浅表复制只复制值类型的值,而对于实例所包含的对象依然指向原有实例. class Program { [Serializable] public class Car { public string name; public Car(string name) { this.name = name; } } [Serializable] public class Person:ICloneable { public int id; public string name;

  • C#中深度复制和浅度复制详解

    本文章主要是讲解C# 语言编程中,深度复制和浅度复制,下面我将通过一个实例进行讲解.在实例开发之前,我们得先知道深度复制是什么和浅度复制是什么,它们之间的区别又是什么,下面将为大家一一揭晓. 1.深度复制是什么? 深度复制就是引用类型的复制. 2.浅度复制是什么? 浅度复制是值类型的复制. 以下是C#中深度复制和浅度复制的实例代码引用片段: using System; using System.Collections.Generic; using System.Text; namespace T

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

    本文深入浅出的分析了ASP.NET深度复制和浅度复制.分享给大家供大家参考.具体分析如下: 之前一直没有搞清楚深度复制和浅度复制的区别到底在哪里,今天彻底把这个东西弄懂了,写出来与到家共勉. 如果大家不懂值类型和引用类型的区别,请先看http://www.jb51.net/article/57471.htm,本来想自己写的,但刚好看到了这篇写的非常全面,就不自己写了. 大家都知道Object是所有类共同的基类,其有个方法是MemberwiseClone(),其用途为 我们可以通过这个方法来达到浅

  • Java 数组复制clone方法实现详解

    这篇文章主要介绍了Java 数组复制clone方法实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.源码 public class Test1 { public static void main(String[] args) { // Student[] arrs = new Student[] { new Student() { id = "22" } }; C# 可以简写法,Java不支持 Student[] arrs

  • python切片复制列表的知识点详解

    1.不指定开始和结束的索引[:],这样得到的切片就可以包含整个列表,然后给切片一个新的变量,从而实现复制列表. 2.创建原始列表的副本,两个列表的操作不会影响. 实例 names = ["Jerry", "Tom"] names_copy = names[:] names.append("Ann") names_copy.append("Bob") print(f"names:{names}") print

  • 利用Vue3实现可复制表格的方法详解

    目录 前言 最基础的表格封装 实现复制功能 处理表格中的不可复制元素 测试 前言 表格是前端非常常用的一个控件,但是每次都使用v-for指令手动绘制tr/th/td这些元素是非常麻烦的.同时,基础的 table 样式通常也是不满足需求的,因此一个好的表格封装就显得比较重要了. 最基础的表格封装 最基础基础的表格封装所要做的事情就是让用户只关注行和列的数据,而不需要关注 DOM 结构是怎样的,我们可以参考 AntDesign,columns dataSource 这两个属性是必不可少的,代码如下:

  • Python实现强制复制粘贴的示例详解

    目录 前因后果 流程思路 代码展示 效果展示 前因后果 公司有人阳了,今天在家上班,突然小姨子就问我有没有baidu文库会员,想下载点东西,我心想这还要会员?用Python不是分分钟的事情! 然后我非常自信的告诉她不用会员随便下载,结果她顺势想来我家,还问我她姐姐在不在家,趁我一个人在家过来想干嘛?本着男孩子一个人在家要好好保护自己的原则,于是我过段拒绝了她! 兄弟们我做的对吗? 咱们来开始今天的内容,咱们不仅要强制复制粘贴,还要自动保存到world文档,就问你刑不刑! 需要的模块 reques

  • 深度思考JDK8中日期类型该如何使用详解

    在JDK8之前,处理日期时间,我们主要使用3个类, Date . SimpleDateFormat 和 Calendar . 这3个类在使用时都或多或少的存在一些问题,比如 SimpleDateFormat 不是线程安全的, 比如 Date 和 Calendar 获取到的月份是0到11,而不是现实生活中的1到12,关于这一点,<阿里巴巴Java开发手册>中也有提及,因为很容易犯错: 不过,JDK8推出了全新的日期时间处理类解决了这些问题,比如 Instant . LocalDate . Loc

  • JavaScript 中有关数组对象的方法(详解)

    JS 处理数组多种方法 js 中的数据类型分为两大类:原始类型和对象类型. 原始类型包括:数值.字符串.布尔值.null.undefined 对象类型包括:对象即是属性的集合,当然这里又两个特殊的对象----函数(js中的一等对象).数组(键值的有序集合). 数组元素的添加 arrayObj.push([item1 [item2 [. . . [itemN ]]]]); 将一个或多个新元素添加到数组结尾,并返回数组新长度 arrayObj.unshift([item1 [item2 [. . .

  • Linux 中fork的执行的实例详解

    Linux 中fork的执行的实例详解 先看看一段fork的程序 int main() { pid_t pid; 语句 a; pid = fork(); 语句 b; } 1.当程序运行到 pid = fork()时,这个进程马上分裂(fork的中文意思)成两个进程,我们称为父进程和子进程,子进程是父进程的副本,副本的意思是子进程把父进程的数据空间,堆和栈都复制一遍给自己用,这要求在内存给子进程分配和父进程同样大的存储空间,这样,父,子进程拥有相同的数据,但不会共享存储空间,他们只是共享正文段.

  • oracle中的procedure编写和使用详解

    1.创建/修改 CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter_list)] {IS|AS} [local_declarations] BEGIN executable_statements [EXCEPTION exception_handlers] END [procedure_name]; a.parameter_list格式如下 parameter_name1 [in | out | in out] type, param

随机推荐