ASP.NET----深浅拷贝问题

浅拷贝是指将对象内的数据完全一致的复制,深拷贝不是这样,它可以将内部的数据按照需要用特殊的方法拷贝,比如说对象内部有一个动态数组,浅拷贝只拷贝指针,而深拷贝可以重新申请空间并将数据复制过来。
看代码:
 
 
 
  
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 " ;
}
}

转载于:https://www.cnblogs.com/brainmao/archive/2011/06/05/2073166.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值