.net 对象浅拷贝和深拷贝的实现
2015-11-27 15:03
260 查看
对象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();
4000
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);//浅拷贝
对象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();
4000
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);//浅拷贝
相关文章推荐
- 引导或系统启动驱动程序无法加载: storflt
- 迷宫程序的实现
- hadoop学习之hadoop完全分布式集群安装
- 习题2-5 分数化小数(decimal)
- 嵌入式存储设备学习笔记
- javascript设计模式实践之策略模式--输入验证
- 设计模式--1、适配器模式
- SQL 使用Cursor(游标)遍历结果集
- SOLID
- iPhone 记录之 点与像素
- MySQL数据库优化之查询缓存(Query cache)
- Android:Gradle之使用教程总结
- 金额数字转中文大写
- chrome访问本地ajax
- Flutter入门之有状态组件
- 从网易与淘宝的font-size思考前端设计稿与工作流
- 波浪子序列(最大上升下降子序列)
- 七个你无法忽视的Git使用技巧
- Java实现堆的封装,进行插入,调整,删除堆顶以完成堆排序实例
- IOS图层Layer学习笔记(六)—— CAScrollLayer