概述
1、浅拷贝(值类型):
public class LightCopy { public int Val { get; set; } public LightCopy(int ival) { Val = ival; } public object getCopy() { return MemberwiseClone(); //浅表副本 } }
测试代码及结果
LightCopy lcopy = new LightCopy(8); MessageBox.Show("" + lcopy.Val); //8 LightCopy lcopy1 = (LightCopy)lcopy.getCopy(); MessageBox.Show("" + lcopy1.Val); //8 lcopy1.Val = 3; MessageBox.Show("" + lcopy1.Val); //3 MessageBox.Show("" + lcopy.Val); //8
2、浅拷贝(引用类型):
public class Content { public int Val { get; set; } } public class LightCopy { public Content myContent; public LightCopy(int val) { myContent = new Content(); myContent.Val = val; } public object getCopy() { return MemberwiseClone(); } }
测试代码及结果
LightCopy lcpy = new LightCopy(8); MessageBox.Show("" + lcpy.myContent.Val); //8 LightCopylcpy1 = (DeepCopy)lcpy.getCopy(); MessageBox.Show("" + lcpy1.myContent.Val); //8 lcpy.myContent.Val = 3; MessageBox.Show("" + lcpy1.myContent.Val); //3 MessageBox.Show("" + lcpy.myContent.Val); //3
3、深拷贝
#region ICloneable 成员 //如果类型继承自ICloneable,但是同时它不是一个Sealed类型的话,它们的子类的默认Clone方法会带来BUG(子类的Clone方法会返回父类的副本,而不是子类本身)。这会逼迫所有的子类都重写Clone方法; public object Clone() { //DeepCopy deepcpy = new DeepCopy(myContent.Val); return this.MemberwiseClone();//浅拷贝 } #endregion //深拷贝
public DeepCopy DeepClone() { using (Stream objectStream = new MemoryStream()) { IFormatter formatter = new BinaryFormatter(); formatter.Serialize(objectStream, this); objectStream.Seek(0, SeekOrigin.Begin); return formatter.Deserialize(objectStream) as DeepCopy; } }
转载于:https://www.cnblogs.com/shenchao/p/4121525.html
最后
以上就是火星上蜗牛为你收集整理的C#Copy的全部内容,希望文章能够帮你解决C#Copy所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复