关于ref的一个细节点

来源:互联网 发布:阿里云恢复备份 编辑:程序博客网 时间:2024/05/19 12:13
  关于ref的作用相信大家都清楚,所以在这里就不做过多的介绍了。但是有这样一个问题,但需要传递的参数是引用类型的时候,我们还需要加ref么。举个简单的例子,有一个Sort方法,需要对数组进行排序(前面的帖子说过:数组是引用类型)。比如需要对整型数组int[] myArray进行排序,那么 Sort( myArray )和 Sort( ref myArray )有区别么?
      从运行结果来看,没有任何的区别。但从运行过程中关于内存的处理还是有一点区别的。
      我们知道,引用类型的数据是在托管堆上,传递的是在栈上的引用(可以理解为C++中的指针)。
 

   在传递过程中,如果不适用ref,则传递的是原值的一份赋值,如果使用ref,则传递的是原来的值。针对于引用类型,如果不适用ref,则在传递的时候,会在栈中另创建一个myArray1的引用,指向的是和myArray一样的托管堆中的内容。如果在前面添加引用,则会直接传递myArray这个引用。所以在引用类型前面加ref还是有区别的。不过这点区别(或者说额外创建引用的这点开销)是很小的,所以平时我们在写代码的时候不必刻意的在参数面前写上ref。

 

0 0