C#的一个语法问题,同样调方法,为什么结果不一样?
代码:
protected void Page_Load(object sender, EventArgs e)
{
string s = "s1 ";
Response.Write(s);
res(s);
Response.Write(s);
TextBox1.Text = "t1 ";
Response.Write(TextBox1.Text);
retext(TextBox1);
Response.Write(TextBox1.Text);
}
public static void res(string s)
{
s = "s2 ";
}
public static void retext(TextBox t)
{
t.Text = "t2 ";
}
输出:
s1s1t1t2
这是为什么呢,怎么不是s1s1t1t1 或 s1s2t1t2 为什么有的值可以改,有的不可以改?
------解决方案--------------------string是不能修改的,而对象默认传递的是引用,它的属性可以修改
要想修改string可以这样
protected void Page_Load(object sender, EventArgs e)
{
string s = "s1 ";
Response.Write(s);
res(ref s);
Response.Write(s);
TextBox1.Text = "t1 ";
Response.Write(TextBox1.Text);
retext(TextBox1);
Response.Write(TextBox1.Text);
}
public static void res(ref string s)
{
s = "s2 ";
}
public static void retext(TextBox t)
{
t.Text = "t2 ";
}
------解决方案--------------------string类是不能更改内容的,如果要更改,用StringBuilder类
还有楼主可能对按引用传递的内存分配不够清楚,如果能画画图就很容易看出来了
------解决方案--------------------string是一种比较特殊的引用类型,传递的实际上是具体的值
所以方法里面的变量改变了并不能影响外面的值
而其他的引用类型传递的是一个指针,改变的是指针指向的具体的值