首页 > 其他分享 >深拷贝、浅拷贝

深拷贝、浅拷贝

时间:2024-04-03 15:16:15浏览次数:14  
标签:DepartmentName Employee var new 拷贝 public

浅拷贝:

 类实现ICloneable接口

例如:

class Employee : ICloneable
{
public string ID { get; set; }
public int Age { get; set; }
public Department DepartmentName { get; set; }
//实现ICloneable接口的Clone方法
public object Clone()
{
return this.MemberwiseClone();//浅拷贝
}
}
class Department
{
public string DepartmentName { get; set; }
public Department(string value)
{
DepartmentName = value;
}
public override string ToString()
{
return DepartmentName.ToString();
}
}

这样使用:

Employee emp1 = new Employee()
{
    ID = "cjavapy",
    Age = 20,
    DepartmentName = new Department("develop")
};
Employee emp2 = emp1.Clone() as Employee;//浅拷贝

深拷贝:
1.完全复制对象,不管是否含有嵌套对象

/// <summary>
/// 深度克隆
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <returns></returns>
public T DeepClone<T>(T source)
{
// Don't serialize a null object, simply return the default for that object
if (Object.ReferenceEquals(source, null))
{
return default(T);
}

var deserializeSettings = new JsonSerializerSettings { ObjectCreationHandling = ObjectCreationHandling.Replace };
var serializeSettings = new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore };
return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(source, serializeSettings), deserializeSettings);
}

或者使用MessagePackSerializer,需要应用安装MessagePack包

例如:

var mc = new MyClass
{
Age = 19,
FirstName = "he",
LastName = "hu",
};

// call Serialize/Deserialize, that's all.
var bytes = MessagePackSerializer.Serialize(mc);
var mc2 = MessagePackSerializer.Deserialize<MyClass>(bytes);

// you can dump msgpack binary to human readable json.
// In default, MeesagePack for C# reduce property name information.
// [99,"hoge","huga"]
var json = MessagePackSerializer.ConvertToJson(bytes);
Console.WriteLine(json);
var text=MessagePackSerializer.SerializeToJson(mc2);
Console.WriteLine(text);

这是实际测试过的,如果有其他建议,请评论区交流,谢谢

标签:DepartmentName,Employee,var,new,拷贝,public
From: https://www.cnblogs.com/Seamless/p/18112685

相关文章

  • 理解列表的引用和浅拷贝,体会path和path[:]的不同
    文章目录零、从哪里来一、先看算法题(回溯法)二、扩展三、总结零、从哪里来引用与浅拷贝与深拷贝记得看这篇文章总结最后,不亏,没看完的话,你会后悔一辈子。一、先看算法题(回溯法)给你一个整数数组nums,其中可能包含重复元素,请你返回该数组所有可能的子集。解集不能......
  • 类的函数成员(三):拷贝构造函数
    一.什么是拷贝构造函数?1.1概念        同一个类的对象在内存中有完全相同的结构,如果作为一个整体进行复制或称拷贝是完全可行的。这个拷贝过程只需要拷贝数据成员,而函数成员是共用的(只有一份拷贝)。        在建立对象时可用同一类的另一个对象来初始化该对......
  • Windows10基于docker的mysql8的备份和拷贝文件到宿主机
    Windows10基于docker的mysql8的备份和拷贝文件到宿主机##环境说明操作系统:windows10docker:v4.25.0mysql:8##进入容器dockerexec-itmysql8/bin/bash ##备份特定数据库mysqldump-uroot-pMm123456jeesite>jeesite.sql ##退出容器 exit ##将备份......
  • 深浅拷贝
    浅拷贝使用方式importcopy#浅拷贝copy.copy()拷贝原则对可变类型对象进行浅拷贝,只做顶层拷贝对不可变类型对象进行浅拷贝,那么不拷贝深拷贝使用方式importcopy#深拷贝copy.deepcopy()拷贝原则对可变类型对象进行深拷贝,除了顶层拷贝,还会......
  • QA测试开发工程师面试题满分问答3: python的深拷贝和浅拷贝问题
    在Python中,深拷贝(deepcopy)和浅拷贝(shallowcopy)是用于创建对象副本的两种不同方式。浅拷贝是创建一个新的对象,该对象与原始对象的内容相同(包括内部嵌套对象的引用),但是它们指向相同的内存地址。换句话说,浅拷贝创建了一个对象的表面副本,而不是递归复制所有嵌套对象。当原始对......
  • 前端面试手写题目|编写一个函数,实现对象深拷贝,递归引用,日期,正则symbol健。手写Object.
    快速,选择,希尔45,编写一个函数,实现对象深拷贝,并解决递归引用,日期,正则表达式,对象中含有symbol健等问题。functiondeepCopy(obj,cache=newWeakMap()){if(obj==null||typeofobj!=='object'){r......
  • 对于拷贝普通对象 深拷贝和浅拷贝是否一样
    对于拷贝普通对象(即不包含嵌套对象或数组的对象),深拷贝和浅拷贝在最终结果上可能是相同的。这是因为普通对象通常只包含基本数据类型(如数字、字符串、布尔值)的属性,这些基本数据类型在赋值时是直接复制的,而不是引用。在浅拷贝中,对象的属性值被复制到新对象中。由于这些属性值是基本......
  • Python的浅拷贝与深拷贝
    浅拷贝#第一种In[1]:x=[1,2,3]In[2]:y=x.copy()In[3]:x[1]=1In[4]:xOut[4]:[1,1,3]In[5]:yOut[5]:[1,2,3]#第二种In[6]:x=[1,2,3]In[7]:y=x[:]In[8]:x[1]=1In[9]:xOut[9]:[1,1,3]In[10]:yOut[10]:[1,2,3]......
  • //拷贝文件夹 //将file1文件夹中的数据拷贝到文件夹file2中
    //拷贝文件夹//将file1文件夹中的数据拷贝到文件夹file2中publicclassFileDemo1{publicstaticvoidmain(String[]args)throwsIOException{//拷贝文件夹//将file1文件夹中的数据拷贝到文件夹file2中Filefile1=newFile("D:\\file......
  • 零拷贝看这一篇就够了(详细图解)
    目录​编辑前言为什么要有DMA技术?传统的文件传输有多糟糕?如何优化文件传输的性能?如何实现零拷贝?mmapwritesendfile使用零拷贝技术的项目PageCache有什么作用?大文件传输用什么方式实现?总结前言磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存10倍......