根据值类型和引用类型的区别,当作为函数参数传递的时候.
值类型是把自己的值复制一份传递给别的函数操作.无论复制的值怎么被改变.其自身的值是不会改变的
而引用类型是把自己的内存地址传递给别的函数操作.操作的就是引用类型值的本身.所以值被函数改变了.
  
如下代码: public void Add(int x)
    {
        x += 10;
    }    public void Add(string str)
    {
        str = "新值";
    }    string a = "原值";
    int b = 0;
    Add(b);
    Add(a);
    Response.Write("a:" + a + "|b:" + b);
上面输出应该为: a:新值|b:0
但实际输出的是:a:原值|b:0这是为什么呢 

解决方案 »

  1.   

    public void Add(string str)
    这里传递是引用没错。str引用的是字符串"原值",而不是你的变量a
    public void Add(ref string str)
    这里的str引用的是你传递的变量a,而不是"原值"你明白了么?
      

  2.   

    string是比较特殊的引用类型str = "新值";这一句,你就看成是和 str = new string("新值");一样的。参数str在Add方法里指向了一个新的引用,而没有直接修改到调用方引用的内容。
    string是比较特殊的,它在堆上有个拘留池,所有"...."的写法都是一个新的实例,除非内容相同。
      

  3.   


    用来 ref 关键字的话,Add(ref int b) 调用后,b的值也一样会变的,这样并没有解释到值类型和引用类型的区别
      

  4.   

    你的Add方法和下面的做法是一样的:class Student
    {
       public string Name {get; set;}
    }var s = new Student() { Name="原值" };void Modify(Student student)
    {
        student = new Student() { Name="新值" };
    }但实际你想要void Modify(Student student)
    {
        student.Name = "新值";    
    }
      

  5.   

    一直在强调string是特殊的引用类型~~ 因为 string str = "xxxx" 这句话别不是直接修改原引用地址里的内容,
    而是自己创建了一个新的引用。在方法作用域内指向了一个新的地址。
    并没有影响到方法外部的引用。
      

  6.   

    月经贴又来了...看这个...http://blog.csdn.net/vrhero/archive/2010/01/09/5166278.aspx
      

  7.   


    什么地方有误?请教str = "xxxx" 的确是指向了新的引用
      

  8.   

    以下是我以前写的总结:http://blog.csdn.net/fangxinggood/archive/2005/09/16/482191.aspx
      

  9.   

    并没有影响到方法外部的引用  >>>  这句话有必要参看 vrhero 的 blog,没说到点子上,认错