方法参数上的 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回收了。
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回收了。
解决方案 »
- C# 调用matlab dll 程序自动退出???求帮助!
- 远程访问服务器端文件
- 剪贴板问题--求仙人指路
- 跨系统数据同步方案
- C#发贴器都用到什么?
- 在winform中如何在界面上实时显示操作结果
- 求助 C# 在dataGridView中加ComboBox 并帮定到相应数据库的字段上 源码 ~~~~~~~~~~~~~~~~急!
- 有关泛型类间的类型转换问题
- 用 TreeView 显示数据库中递归表的问题?
- Virual Studio.net For Office2003怎么使用?有人用过吗?请讲讲体会。
- 类似MSN提示信息的Form该如何解决执行效率问题
- this.sqlInsertCommand1.CommandText = "INSERT INTO MyTable(name, age, text) VALUES (@name, @age, @text);
第二个:参数是引用,其实就是可以改变的指针,所以在子函数中new的对象(指针)可以回传。这个指针在主函数依然有效。