.net 对象浅拷贝和深拷贝的实现
来源:互联网 发布:测评软件 编辑:程序博客网 时间:2024/05/22 05:01
对象A浅拷贝到对象B,A和B实际是同一个引用,改变A就会改变B。
对象A深拷贝到对象B,B是一个全新的对象,与A只是值相同。
具体实现:
方法1:继承接口ICloneable
public class Class1:ICloneable
{
int m_member1;
string m_member2;
Class2 m_obj;
/// <summary>
/// 浅拷贝
/// </summary>
/// <returns></returns>
public Object Clone()
{
return this.MemberwiseClone();
}
/// <summary>
/// 深拷贝
/// </summary>
/// <returns></returns>
public Object Clone()
{
Class1 ret = new Class1();//new一个新对象
ret.m_member1 = this.m_member1;//给新对象成员赋上一样的值
ret.m_member2 = this.m_member2;
ret.m_obj = (Class2 )this.m_obj.Clone();//新对象中有其他复杂类成员时,不要直接赋值,而是对成员进行深拷贝。
return ret;//将新对象返回
}
}
public class Class2:ICloneable
{
string m_str;
/// <summary>
/// 深拷贝
/// </summary>
/// <returns></returns>
public Object Clone()
{
Class2 ret = new Class2();
ret.m_str = this.m_str;
return ret;
}
}
使用:
Class1 A = new Class1();
Class1 B = A.Clone();//对A进行深拷贝或浅拷贝
方法2:自定义带拷贝功能的构造函数
public class Class1
{
int m_member1;
string m_member2;
Class2 m_obj;
public Class1()
{
}
public Class1(Class1 org,bool deepCopy)
{
this.m_member1=org,m_member1;
this.m_member2=org.m_member2;
if(deepCopy)
this.m_obj= (Class2 )this.m_obj.Clone();//深拷贝
else
this.m_obj=org.m_obj;//浅拷贝
}
public class Class2
{
string m_str;
}
使用:
Class1 A=new Class1 ();
Class1 B=new Class1(A,true);//深拷贝
Class1 C=new Class1(A,false);//浅拷贝
- .net 对象浅拷贝和深拷贝的实现
- JavaScript对象的浅拷贝和深拷贝简单实现
- 对象的深拷贝和浅拷贝
- Python对象的拷贝,浅拷贝和深拷贝。
- object c的浅拷贝(地址拷贝)和深拷贝(对象拷贝)
- c#的对象的深拷贝和浅拷贝
- 对象深拷贝和浅拷贝
- 复制对象 和 浅拷贝,深拷贝
- js 对象浅拷贝和深拷贝
- python对象的浅拷贝和深拷贝
- C++对象的“深拷贝”和“浅拷贝”
- 21.python对象的浅拷贝和深拷贝
- C++对象的深拷贝和浅拷贝
- Java对象的 深拷贝和浅拷贝
- Python对象的浅拷贝和深拷贝
- java对象的浅拷贝和深拷贝
- 浅谈JavaScript对象的浅拷贝和深拷贝
- js对象的浅拷贝和深拷贝
- 云主机是什么?
- 习题2-5 分数化小数(decimal)
- hadoop学习之hadoop完全分布式集群安装
- javascript设计模式实践之策略模式--输入验证
- Spring MVC(三)基于上一篇使用JUnit编写测试用例
- .net 对象浅拷贝和深拷贝的实现
- error LNK2019: 无法解析的外部符号 _Direct3DCreate9@4,该符号在函数 "int __cdecl InitD3D(struct HWND__ *,unsigned lo
- 【Android】AsyncTask原理应用及源码关键部分解析
- 《剑指Offer》读书笔记05:用两个栈实现队列
- 【Struts2】(3)参数传递
- linux 查看库依赖关系
- MySQL分片
- 如何保证网页的字体在各平台都尽量显示为最高质量的黑体?
- 多个进程间共享动态链接库的原理