一个关于List<string>的基本问题
时间:2011-12-09
来源:互联网
string ss = new string('2', 4);
ss = "hh";
List<string> ls = new List<string>();
ls.Add(ss);
MessageBox.Show(ls[0]);
ss = "hh2";
MessageBox.Show(ls[0]);
两次show的结果都是hh,证明了容器list里面的实体和外面的ss不是同一个引用
若把string改成控件Butten
Button btn = new Button();
btn.Text = "haha";
List<Button> lsbtn = new List<Button>();
lsbtn.Add(btn);
MessageBox.Show(lsbtn[0].Text.ToString());
btn.Text = "haha2";
MessageBox.Show(lsbtn[0].Text.ToString());
两次show的结果不一样,证明了list里面的实体和外面的btn是一个引用
如果我要装入自己定义的类,情况也同Butten
请问:
List容器什么情况下装入外面对象的引用,什么时候装入外面对象的副本
我一直以为c#里面凡是要new才能用的对象,都像是C++里面的智能指针,但string却不是这样,能仔细说明下吗?
作者: falcomavin 发布时间: 2011-12-09
作者: c02645 发布时间: 2011-12-09
作者: kingdom_0 发布时间: 2011-12-09
堆栈上
其实是,变量名+指针,指针指到堆上的对象
堆栈上
值类型,是变量名+值
你修改引用对象,其实是修改,堆上的内容,任何地方修改变量,都是如此。
修改值类型,就直接修改堆栈上的值
但string类型是不可修改的,或者说,修改的时候,直接在堆栈上又分配了空间。
你之前的使用,是直接把内容放到了应用对象内部的。
可以认为string是值类型
作者: jiuhexuan 发布时间: 2011-12-09
作者: jiuhexuan 发布时间: 2011-12-09
c#中string对象是不可变,对string对象的赋值或操作都只是重新创建一个string对象。
作者: dalmeeme 发布时间: 2011-12-09
作者: tanghuawei 发布时间: 2011-12-09
作者: cmk128 发布时间: 2011-12-09
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28