首页 > 代码库 > C#Copy
C#Copy
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; } }
C#Copy
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。