如下程序段:
using System;public class test
{
public static void fun(ref int[] a)
{
a[0]=1;
a=new int[5]{9,9,9,9,9};
} public static void Main(string[] args)
{
int[] data={8,8,8,8,8,8,8};
foreach(int i in data)
Console.Write(i+" ");
Console.WriteLine();
fun(ref data);
foreach(int j in data)
Console.Write(j+" ");
Console.WriteLine();
}
}会修改原来数组的引用,使其指向新分配的数组,而如果ref去掉,就不会修改原来的引用值?
不是都是引用传递吗?
本来就是引用传递的,如数组,另外用ref传递和本来有何区别?谢谢!

解决方案 »

  1.   

    数组是引用类型,所以加不加ref都一样。
      

  2.   

    但是加了ref的话,如果在函数内如ref修饰的数组重新new一下,那原来数组将重新指向新引用,而不加ref修饰,那即使用new重新建立一个数组,原来传进来的数组引用也不会改变,这是什么原因?
      

  3.   

    加不加ref关系的是现在这个引用变量是否是按引用传递的
      

  4.   

    在不加ref的时候,你可以理解为a和data是两个不同的变量,但是他们指向的是堆中的同一个整形数组,那么自然如果在函数内用new重新建立一个数组,data所引用的数组是不会改变的。再加ref的时候,你可以理解为a是data的引用(也就是说a是引用变量data的引用,换而言之,a就是data),所以如果函数内用ref修饰的数组a重新new一下,那data也将重新指向新引用