方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。第一个类中:
  PassCoordinateByValue(loc);
  这里传递了loc这个对象的引用给方法PassCoordinateByValue,在方法PassCoordinateByValue中用变量c接收了这个引用,紧接着,new了一个新的对象,把这个新对象的引用赋给c,这时候c就不再引用传进来的那个对象,所以对c的更改不能反映到外面。第二个类中:
  因为PassCoordinateByValue中的c声明为ref,按照ref关键字的定义,任何对ref类型变量的修改都会直接反映到这个变量中。
  PassCoordinateByValue(ref loc)相当于(可以理解为)传递了loc这个变量的指针给PassCoordinateByValue方法,PassCoordinateByValue方法中用c这个变量(指针)接收了这个对象,当new一个对象,将这个对象的引用指向c的时候,这个时候,相当于修改了传递进来的这个指针的引用,所以调用这个方法的函数体的loc这个局部变量指向的对象也相应发生了变化;至于原来的那个对象,由于没有其他任何变量对它进行引用,已经被GC回收了。

解决方案 »

  1.   

    第一个:参数是对象,虽然实质上也是指针,但是在子函数内部不能改变,这是标准c里面规定的,子函数里面new的东西出了子函数的作用范围就失效了;
    第二个:参数是引用,其实就是可以改变的指针,所以在子函数中new的对象(指针)可以回传。这个指针在主函数依然有效。
      

  2.   

    不带ref 是传值,带上ref是传址.
      

  3.   

    和和,把两个例子PassCoordinateByValue中的c=new coordinate();注释掉,结果应该是一样的。不管是ref还是没有ref. 然后你在想想为什么是这样。都3星级了,应该没问题吧?