在⼀些书中关于 REF 参数的说明⼀般如下:
ref 在使⽤过程中会改变变量的值,且例⼦如下:
public static void ValueParam(string str) { str = "251"; } public static void RefParam(ref string str) { str = "250"; } public static void Main() { string str = "249"; ValueParam(str); Console.WriteLine(" Value Param:"+str); RefParam(ref str); Console.WriteLine(" Ref Param:"+str); }
Value Param:249
Ref Param:250 但我在实践中发现: 数组参数在不⽤ REF 修饰下值也会改变的,
看下⾯这个例⼦:
public void ChageValue(int[] arr) { for(int i =0;i<arr.Length;i++) arr[i]=0; } public static void Main() { int [] aar = {3,4,5,7,2,6,1}; for(int i=0;i<aar.Length;i++) Console.WriteLine(">>>"+aar[i].ToString()); ChageValue(aar); // 这⾥没有使⽤ REF 参数. for(int i=0;i<aar.Length;i++) Console.WriteLine("<<<"+aar[i].ToString()); }
从结果中可以看出,数组本⾝已经改变了,因此不仅仅⽤ REF 的形式可以改变参数