c# 深克隆与浅克隆
前言
我们都知道memberwiseclone 会将浅克隆。
什么是浅克隆?如何深克隆呢?
正文
public class good{
private good(){
oneclass=new class{
int id=8;
string name='id';
}
}
private static good __good;
private static good __good=new good();
public good createinstance()
{
return __good.memberwiseclone();
}
public int a=0;
public string b="ab";
pulic class oneclass;
}
测试:
void main()
{
var student1=good.createinstance();
var student2=good.createinstance();
student1.oneclass.id=9;
console.log('student2 oneclass.id{0}',student2.oneclass.id);
}
这里我们得出了结果为9;
ok,那么这真的是个匪夷所思的问题,明明两个对象啊。
那么回归到浅克隆上。
当克隆good的时候是这样的。
让good的classone的引用给了新的克隆对象。
那么如何深克隆呢?
深克隆其实就是将对象序列化,也就是说要深克隆的话必须对象系列化;
public class SerializeHelper
{
public static string Serializable(object target)
{
using (MemoryStream steam=new MemoryStream())
{
new BinaryFormatter().Serialize(steam,target);
return Convert.ToBase64String(steam.ToArray());
}
}
public static T Derializable<T>(string target)
{
byte[] targetArray = Convert.FromBase64String(target);
using (MemoryStream steam =new MemoryStream(targetArray))
{
return (T)(new BinaryFormatter().Deserialize(steam));
}
}
public static T DeepClone<T>(T t)
{
return Derializable<T>(Serializable(t));
}
}
改变一个good 类。
public class good{
private good(){
oneclass=new class{
int id=8;
string name='id';
}
}
private static good __good;
private static good __good=new good();
public good createinstance()
{
return SerializeHelper.DeepClone(__good.memberwiseclone());
}
public int a=0;
public string b="ab";
pulic class oneclass;
}
测试一下:
void main()
{
var student1=good.createinstance();
var student2=good.createinstance();
student1.oneclass.id=9;
console.log('student2 oneclass.id{0}',student2.oneclass.id);
}
c# 深克隆与浅克隆的更多相关文章
- Java克隆--深克隆与浅克隆的区别
克隆,就是复制一个对象的副本,而克隆又分浅克隆和深克隆.浅克隆是指克隆得到的对象基本类型的值改变了,而源对象的值不会变.但如果被克隆对象引用类型的值改变了,那么源对象的值同样会改变,因为引用类型在栈内 ...
- 浅谈Java中的深克隆和浅克隆(阿里面试)
在最近的秋招中,阿里和多益网络都问到了这个问题,虽然很简单,但是我还是想总结一下,感兴趣的可以看一下我的个人博客网站(Spring+MyBatis+redis+nginx+mysql)(适合菜鸟),最 ...
- Java中的深克隆和浅克隆
为什么要克隆 首先思考一个问题, 为什么需要克隆对象? 直接new一个对象不行吗? 克隆的对象可能包含一些已经修改过的属性, 而new出来的对象的属性都还是初始化时候的值, 所以当需要一个新的对象来保 ...
- 【java开发系列】—— 深克隆和浅克隆
Java支持我们对一个对象进行克隆,通常用在装饰模式和原型模式中.那么什么是深克隆,什么是浅克隆呢. [浅克隆],通常只是对克隆的实例进行复制,但里面的其他子对象,都是共用的. [深克隆],克隆的时候 ...
- JAVA深克隆与浅克隆1
复制就是得到一个副本 克隆就是复制一个对象的复本.但一个对象中可能有基本数据类型,如:int,long,float 等,也同时含有非基本数据类型如(数组,集合等)被克隆得到的对象基本类型的值修改 ...
- JavaScript的深克隆与浅克隆
JS数据类型分为两类: 基本类型(Number.Boolean.Undefined.Null.String.Symbol(ES6新加,此处不讨论))与引用类型(Object).原始类型存储的是对象的实 ...
- js深克隆与浅克隆
定义: 浅克隆: 克隆对象的一层属性, 如果对象还有对象的话,里面的对象没有进行克隆,只是把地址给了别人.也可以理解为只是简单的克隆了躯体,但是没有得到其灵魂: 深克隆:克隆对象的多层属性,对象里面还 ...
- java深克隆与浅克隆
2015.9.19 6:45 星期五 1
- java 深克隆(深拷贝)与浅克隆(拷贝)详解
java深克隆和浅克隆 基本概念 浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所拷贝的对象,而不复制它所引用的对 ...
- Java的浅克隆和深克隆
如何实现对象的克隆 (1)实现 Cloneable 接口并重写 Object 类中的 clone() 方法: (2)实现 Serializable 接口,通过对象的序列化和反序列化实现克隆,可以实现真 ...
随机推荐
- 1、mysql-索引简介
1.1 MySQL官方对索引的定义为: 索引(index)是帮助MySQL高效获取数据的数据结构(有序).在数据之外,数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数 ...
- Sealos 是企业节省成本的终极武器
本文通过多维度,多场景对比来阐述 Sealos 为企业节省大量成本,结合一些现有客户具体的实际情况全面分析成本模型,企业可以根据自己的实际情况来对号入座,看是否适合使用 Sealos. 云操作系统节省 ...
- 利用Nginx正向代理实现局域网电脑访问外网
引言 在网络环境中,有时候我们需要让局域网内的电脑访问外网,但是由于网络策略或其他原因,直接访问外网是不可行的.这时候,可以借助 Nginx 来搭建一个正向代理服务器,实现局域网内电脑通过 Nginx ...
- flomo 窗口置顶 - 通用方法 autohotkey
需求 开网页的时候需要记录一些东西 想一直显示 操作 要安装 https://www.autohotkey.com/ 创建个 .ahk 文件 运行下 快捷键是 alt+小键盘8 ;置顶当前窗口 !Nu ...
- think about 和 think of 区别
about 是 on by out 简称 about 在旁边 在外围 周边 think about you 想你有关的事 of 是 belong to 什么什么的 of指的是 这个人或者这个事本身相关 ...
- react build 后,打包后自动将index.html copy 404.html - create-react-app 创建的项目
起因:build上传gitee,启用路由需要404.html自动跳转 当前环境 create-react-app 搭建的架子 解决方案 由于默认的时候把build.js打包,无法查看,只好eject ...
- TLV320ADC3101这颗立体声 ADC芯片分析体验及总结
一 需求分析 音频ADC采集,顾名思义,就是采集语音信号的ADC.随着基于音视频穿戴式设备的广泛应用,音频ADC使用十分广泛.TI的这颗ADC芯片凭借着先发优势,在很多领域已经有广泛的应用了. 作为一 ...
- Android Studio导出APP的数据库db文件
原文地址:Android Studio导出APP的数据库db文件 | Stars-One的杂货小窝 最近项目开发需要使用到Android内置的Sqlite存数据,但是公司里没有对应的调试环境,只能让现 ...
- 用于演示文稿的新 Dapr 幻灯片
Dapr 官方博客上(https://blog.dapr.io/posts/2024/03/10/new-dapr-slide-deck-for-your-presentations/)发布了一个新的 ...
- day07-Java方法01
Java方法01 1.什么是方法? Java是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序集合 方法包含于类或者对象中 方法在程序中被创建,在其他地方被引用 设计方法的原则:方法 ...