using
System;
using System.Collections.Generic;
using System.Text;
namespace NET.NST.Third.DeepCopy
{
public class Program
{
static void Main( string [] args)
{
DeepCopy dc = new DeepCopy();
dc._i = 10 ;
dc._a = new A();
DeepCopy deepclone = (DeepCopy)dc.Clone();
DeepCopy shadowclone = (DeepCopy)dc.MemberwiseClone();
// 深拷贝的拷贝对象将拥有自己的引用类型成员对象,
// 所以这里的赋值不会影响原始对象
deepclone._a._s = " 我是深拷贝的A " ;
Console.WriteLine(dc);
Console.WriteLine(deepclone);
Console.WriteLine( " \r\n " );
// 浅拷贝的拷贝对象共享原始对象的引用类型成员对象,
// 这里的赋值将影响原始对象
shadowclone._a._s = " 我是浅拷贝的A " ;
Console.WriteLine(dc);
Console.WriteLine(shadowclone);
Console.Read();
}
}
public class DeepCopy : ICloneable
{
public int _i = 0 ;
public A _a = new A();
public object Clone()
{
// 实现深拷贝
DeepCopy newdc = new DeepCopy();
newdc._a = new A();
newdc._a._s = _a._s;
newdc._i = _i;
return newdc;
}
// 实现浅拷贝
public new object MemberwiseClone()
{
return base .MemberwiseClone();
}
public override string ToString()
{
return " I的值为: " + _i.ToString() + " ,A 为: " + _a._s;
}
}
public class A
{
public String _s = " 我是原始A " ;
}
}
using System.Collections.Generic;
using System.Text;
namespace NET.NST.Third.DeepCopy
{
public class Program
{
static void Main( string [] args)
{
DeepCopy dc = new DeepCopy();
dc._i = 10 ;
dc._a = new A();
DeepCopy deepclone = (DeepCopy)dc.Clone();
DeepCopy shadowclone = (DeepCopy)dc.MemberwiseClone();
// 深拷贝的拷贝对象将拥有自己的引用类型成员对象,
// 所以这里的赋值不会影响原始对象
deepclone._a._s = " 我是深拷贝的A " ;
Console.WriteLine(dc);
Console.WriteLine(deepclone);
Console.WriteLine( " \r\n " );
// 浅拷贝的拷贝对象共享原始对象的引用类型成员对象,
// 这里的赋值将影响原始对象
shadowclone._a._s = " 我是浅拷贝的A " ;
Console.WriteLine(dc);
Console.WriteLine(shadowclone);
Console.Read();
}
}
public class DeepCopy : ICloneable
{
public int _i = 0 ;
public A _a = new A();
public object Clone()
{
// 实现深拷贝
DeepCopy newdc = new DeepCopy();
newdc._a = new A();
newdc._a._s = _a._s;
newdc._i = _i;
return newdc;
}
// 实现浅拷贝
public new object MemberwiseClone()
{
return base .MemberwiseClone();
}
public override string ToString()
{
return " I的值为: " + _i.ToString() + " ,A 为: " + _a._s;
}
}
public class A
{
public String _s = " 我是原始A " ;
}
}