| 发表于: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()....}也是一样的应该。 这是我的理解 | | |
|