public void testa()
        {
            Test a = new Test();
            testb(a);
            Console.Write(a.i);
            Console.Read();
        }
        public void testb(Test a)
        {
            a.i = 20;
            a = new Test();
        }
    }    public class Test
    {
        public int i = 15;
    }
在testb方法中将a重新实例化了。为什么输出的结果不是15而是20?而我在testb中用ref修饰参数的话输出结果却是15.
但a本身就是引用类型呀...求教...

解决方案 »

  1.   

    testa()与testb()均是测试类里面的方法。
      

  2.   


            public void testb(Test a) 
            { 
                a.i = 20; 
                a = new Test();  
                /*
                 * 你又重新创建了一个 Test 类的示例放在了 形参 a 中
                   * 所以从方法中出来之后 打印出的 a.i 就是 15 了
                 */
            }
      

  3.   

    又一月经帖....NET中所有参数传递未经ref或out关键字声明均为“按值传递”,与数据类型无关...对引用类型传递的是该引用的副本,对该副本的任何更改均不会影响该引用本身...
      

  4.   

    变量作用域问题.
    a = new Test()所分配的内存生存期仅仅在方法内.跳出方法后a仍然指向未调用方法前的引用.
      

  5.   

    典型不求甚解,你要是信了5楼的解释这个问题你就永远迷糊下去了...去认真看看MSDN...