C#中,存储数组之类对象的变量并非实际存储对象自己,而是存储对象的引用。按值传递数组时,程序将变量传递给方法时,被调用方法接受变量的一个副本,所以在被调用时试图修改数据变量的值时,并不会影响变量的原始值;而按引用传递数组时,被调用方法接受的是引用的一个副本,所以在被调用时修改数据变量时,会改变变量的原始值。下面一个例子说明以下:数组
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Array { class Program { public static void FirstDouble(int[] a) { for (int i = 0; i < a.Length; i++) { a[i] = a[i] * 2; } a = new int[] { 11, 12, 13 }; } public static void SecondDouble(ref int[] a) { for (int i = 0; i < a.Length; i++) { a[i] = a[i] * 2; } a = new int[] { 11, 12, 13 }; } public static void OutputArray(int[] array) { for (int i = 0; i < array.Length; i++) { Console.WriteLine("{0}", array[i]); } //Console.WriteLine("\n"); } static void Main(string[] args) { int[] array = { 1, 2, 3 }; Console.WriteLine("不带ref关键字方法调用前数组内容:"); OutputArray(array); FirstDouble(array); Console.WriteLine("不带ref关键字方法调用后数组内容:"); OutputArray(array); int [] array1={1,2,3}; Console.WriteLine("带ref关键字方法调用前数组内容:"); OutputArray(array1); SecondDouble(ref array1); Console.WriteLine("带ref关键字方法调用后数组内容:"); OutputArray(array1); Console.ReadLine(); } } }
运行结果以下图:spa
注意的是:调用带ref关键字的方法时,参数中也要加ref关键字。3d