C#中Clone一个对象的值到另一个对象案例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#中Clone一个对象的值到另一个对象案例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2380字,纯文字阅读大概需要4分钟。
内容图文
![C#中Clone一个对象的值到另一个对象案例](/upload/InfoBanner/zyjiaocheng/594/0150f53615f24aff93ad8c7239250684.jpg)
我也只是略懂皮毛,自己记录下方便以后看的,各位有任何高见烦请留言,谢谢,抱拳!
想只复制值需要你的类实现ICloneable接口,并实现public object Clone()方法,其中
{
return this as object; //引用同一个对象
return this.MemberwiseClone(); //浅复制
return new DrawBase() as object;//深复制
}
引用
即相当于用等号(=)赋值,相当于 this,引用,两者共用一套数据
深复制
新建对象,需手动赋值,所有数据新建,两个对象完全无关
浅复制
只复制值而不要引用,但只作用于基础类型(int,float,string也好使),对于引用类型(如自建类)不生效。如果只想要值,可在自建类里也是用这种办法,如a.t = T.Clone() as T; 最后将a返回,即可解决这个问题。
本次主谈浅复制,如有形如:
class a : ICloneable
{
public int i;
public string str;
public b ins;
public object Clone()
{
return this.MemberwiseClone(); //浅复制
}
}
class b
{
public int bi;
}
--------------Program--------------
Main :
{
a t1 = new a();
t1.i = 1;
t1.str = "str1";
t1.ins = new t1();
t1.ins.bi = 111;
a t2 = t1.Clone() as a;
print(t1.i + " " + t2.i);
print(t1.str + " " + t2.str );
print(t1.ins.bi + " " + t2.ins.bi);
t2.i = 2;
t2.str = "str2";
t2.ins.bi = 222;
print(t1.i + " " + t2.i);
print(t1.str + " " + t2.str );
print(t1.ins.bi + " " + t2.ins.bi);
}
首先这段代码实际上是不会运行的,因为浅复制不会复制引用,也就是在print(t2.ins.bi)时,实际上t2.ins是空,但t2.i和t2.str是有值的,而且在后续对t2.i和t2.str进行改动时并不会影响到t1的值,这一部分的结果使我们想要的。
但实际上类里有属性是引用是难以避免甚至是很常见的,这种情况我们只需要在类b中也实现ICloneable接口并实现
public object Clone()
{
return this.MemberwiseClone(); //浅复制
}
同时修改类a中的Clone方法为:
public object Clone()
{
a T = this.MemberwiseClone() as a; //浅复制
T.ins = ins.Clone() as b;
return T;
}
由此,t2将获取到t1的所有值,且对t2修改时,并不会影响到t1。
补充知识:C++中实现对象的clone()
在C#中,许多对象自动实现了clone函数,在C++中,要拷贝一个对象,除了自定义一个拷贝构造函数来实现对象复制外,还可以像C#中那样实现一个clone函数,这需要借助编译器实现的一个隐藏拷贝构造函数,这样的做法,更省心。
#include "stdafx.h"
#include <iostream>
class CA
{
public:
int value;
CA* clone() const { return new CA( *this );}
//仅一个构造函数
CA(int a ){value=a;}
};
int _tmain(int argc, _TCHAR* argv[])
{
CA* objA=new CA(10);
CA* objtemp=objA->clone();
delete objA;
std::cout<<objtemp->value;
delete objtemp;
return 0;
}
以上这篇C#中Clone一个对象的值到另一个对象c#教程案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持
内容总结
以上是互联网集市为您收集整理的C#中Clone一个对象的值到另一个对象案例全部内容,希望文章能够帮你解决C#中Clone一个对象的值到另一个对象案例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。