日期:2014-05-19  浏览次数:20427 次

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是一种比较特殊的引用类型,传递的实际上是具体的值
所以方法里面的变量改变了并不能影响外面的值

而其他的引用类型传递的是一个指针,改变的是指针指向的具体的值