您的位置:程序门 -> .net技术 -> .net framework



arraylist clone问题?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


arraylist clone问题?[已结贴,结贴人:loner]
发表于:2007-12-23 09:01:39 楼主
  arraylist   a=new   arraylist();
    arraylist   b=new   arraylist();
    a.add("a");
    b=(arraylist)a.clone();
    a[0]="b";
    msdn说arraylist的clone是浅拷贝,此时为什么b[0]还是"a"啊?
发表于:2007-12-24 23:22:051楼 得分:4


http://topic.csdn.net/t/20040106/08/2636745.html

http://www.codeproject.com/kb/dotnet/clone.aspx?print=true
发表于:2007-12-27 13:45:022楼 得分:0
是啊,我也不明白。
分配的内存结构是什么样的???
发表于:2007-12-27 14:31:003楼 得分:7
c# code
class temp { public string str = ""; public int n = 0; }

c# code
arraylist a = new arraylist(); arraylist b = new arraylist(); temp t = new temp(); t.str = "a"; t.n = 2; a.add(t); b = (arraylist)a.clone(); t.str = "b";
发表于:2007-12-27 14:42:104楼 得分:0
字符串是一个很特殊的类,不适合测试浅拷贝
发表于:2007-12-27 14:43:385楼 得分:0
memberwiseclone   方法创建一个浅表副本,方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其复本引用同一对象。

发表于:2007-12-27 14:46:156楼 得分:1
字符串是特殊的引用类型
发表于:2007-12-27 19:43:357楼 得分:7
我研究了半天,果然是string比较特殊

msdn上写的:
string   的值一旦创建就不能再修改,所以称它是恒定的。看似能修改   string   的方法实际上只是返回一个包含修改内容的新   string。如果需要修改字符串对象的实际内容,请使用   system.text.stringbuilder   类。

c# code
string a = "aaa"; //a---->“aaa” string b = a; //a---->“aaa”<---b,传 引用 a ="ccc"; //a是不能被改变的,这里是返回了一个新的string对象 //a--->"ccc" b--->"aaa"


lz是一样的道理,通过浅拷贝a,b先指向同“a”,后来改变了a="b",a指向了新对象“b”,而b还是指向“a”

这个和值类型看起来可能相识,但完全不同,他分配在线程栈上,传的是值
c# code
int32 a = 1; //a(1) int32 b = a; //a(1) b(1) a = 2;


而和其他引用类型也不同
c# code
class ex { public int x; public ex () { this.x = 0; } public ex(int x) { this.x = x; } } class examlpe { static void main() { ex a = new ex(1); //创建新ex对象 a-->1 ex b = a; //传引用,a,b指向同一个实例,a--> 1 <--b a.x = 2; //和string不同a是可以被修改的,a--> 2 <--b console.writeline("{0}",a); console.writeline("{0}",b.); } }


这个也可以把ex类实现接口的clone(){this.memberwiseclone()....}也是一样的应该。

这是我的理解
发表于:2007-12-27 19:50:078楼 得分:0
写掉了:
object   a   =a[0];
console.write(a.gettype());

结果是system.string
发表于:2008-01-01 02:01:599楼 得分:1
可能是线程的执行周期吧。


快速检索

最新资讯
热门点击