C# winform Tag 中存储的自定义对象是值传递而不是引用吗

在c#winform开发中,我在成员变量里声明了一个List<User>list=newList<User>()其中User为自定义类,里面假设只有一个name的字符串属... 在c# winform开发中,我在成员变量里声明了一个List<User> list = new List<User>() 其中User为自定义类,里面假设只有一个 name 的字符串属性。现在我动态生成若干个Button控件,语句大致如下: User user = new User(); user.Name = "oldData"; this.list.Add(user); Button button = new Button(); button.Tag = user; 现在问题出现了,当我在之后的代码里令
User user = (User) button.Tag; user.Name = "newData"; 请问现在在list中对应的User对象,譬如list[0].Name 有没有被更改为 "newData" 呢,
即 button.Tag 是存放了对User对象的一个引用(引用传递),还是说是存放了一个新的User对象,而与在list中对应的User对象不同,仅仅是一份拷贝,修改其值并不能影响list里存放的对象的值 (即 作了一份拷贝)?
展开
 我来答
FantasyChump
2012-09-04 · TA获得超过3289个赞
知道大有可为答主
回答量:2127
采纳率:0%
帮助的人:2265万
展开全部
引用。类对象除非你新建,否则始终是引用传递的,也就是你列表中和tag中保存的是同一个对象。理论上来说,其实这个对象建立在托管堆上,而Button的Tag和List中保存的只是一个对象的引用(简单理解为一个地址编号)。因此通过任何一个方式修改,其它所有地方的都会同时修改,因为你修改的是同一个对象。
追问
我遇到比较诡异的问题了.回去再 看看log
哲事姓无
2012-09-14 · TA获得超过1176个赞
知道小有建树答主
回答量:903
采纳率:100%
帮助的人:450万
展开全部
你的例子中的会被修改的。除非你的tag中赋值了一个struct,那么会得到一个拷贝。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kenlee_gz
2012-09-04 · TA获得超过494个赞
知道小有建树答主
回答量:457
采纳率:33%
帮助的人:357万
展开全部
会修改,Tag是保存引用。不是拷贝。
追问
您确定吗?
追答
确定
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
草薙在
2012-09-04 · TA获得超过4795个赞
知道大有可为答主
回答量:6187
采纳率:50%
帮助的人:6348万
展开全部
确定你的User是class不是struct
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式