我是靠谱客的博主 火星上蜗牛,最近开发中收集的这篇文章主要介绍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; } }

 

转载于:https://www.cnblogs.com/shenchao/p/4121525.html

最后

以上就是火星上蜗牛为你收集整理的C#Copy的全部内容,希望文章能够帮你解决C#Copy所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部