c#里面DataTable对象的赋值,难道不是引用的?

DataTabledt=newDataTable();DataTabledtCopy=newDataTable();DataSetds=newDataSet();ds.R... DataTable dt = new DataTable();
DataTable dtCopy = new DataTable();
DataSet ds = new DataSet();
ds.ReadXml(@"C:\Documents and Settings\wenxi\Desktop\wenxi.xml");
dt = ds.Tables[0];
dtCopy = dt;
dt = null;
之前提了一个问题,注意这一次是dtCopy = dt;直接赋值,但是当我把dt设为null的时候,调试发现dtCopy里面依然还是有值,为什么?
展开
 我来答
etuchang
2009-05-14 · 超过43用户采纳过TA的回答
知道答主
回答量:152
采纳率:0%
帮助的人:139万
展开全部
datatable从MarshalByValueComponent 继承而来。

MarshalByValueComponent本身是一个对象,所以是引用类型,但是这个类是在远程处理的时候被按值封装的,比如DataTable就是这个类派生的

按值封装的意思就是说,远程处理的时候,从服务器传递到客户端的该类型的对象不是原来服务器上的那个对象的引用,而是按值封装进行序列化和反序列化之后的另一个对象,这个对象相当于服务器端该对象在客户端的一个副本
沧海V飞天
2009-05-14 · TA获得超过450个赞
知道小有建树答主
回答量:394
采纳率:0%
帮助的人:270万
展开全部
dt = ds.Tables[0];
dt指向一个地址空间,这个地址空间也被ds.Tables[0]指向 我们记为地址空间A 他是有数据的
dtCopy = dt;
dtCopy也指向地址空间A
dt = null
dt指向一个地址空间 这个地址空间为NULL 我们记为B

这时候 dtCopy指向的还是地址空间A
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a124988724
2009-05-14
知道答主
回答量:30
采纳率:0%
帮助的人:0
展开全部
把dt设为null之前 dtCopy已经赋值,所以dt的数据在dtCopy里面dtCopy = dt; dt = null;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
神宇工作室
2009-05-14 · TA获得超过245个赞
知道答主
回答量:326
采纳率:0%
帮助的人:191万
展开全部
因为 它不是引用类型
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式