使用ref和out参数
通常,向方法传递一个实参时,对应的参数(形参)会用实参的一个副本来初始化。换言之,随便在方法内部进行什么修改,都不会影响作为参数来传递的一个变量的原始的值。
1 static void Main() 2 { 3 int x = 42; 4 GetValue(x); 5 Console.WriteLine(x) //输出42,而不是43 6 } 7 8 static void GetValue(int param); 9 { 10 param++; 11 }
如果为一个参数(形参)附加了ref关键字作为前缀,该参数就会成为实参的一个别名(或者对实参的一个引用),而不再是实参的一个副本。使用ref参数时,向参数应用的任何操作,都会同样应用于实参,因为参数(形参)和实参引用的是同一个对象。向一个ref参数传递一个实参时,实参也必须附加ref关键字作为前缀。
1 static void Main() 2 { 3 int x = 42; 4 GetValue(ref x); //使用了ref 5 Console.WriteLine(x) //输出43 6 } 7 8 static void GetValue(ref int param); //使用了ref 9 { 10 param++; 11 }
在向方法传递一个out参数之后,必须在方法内部对其进行赋值;由于out参数必须在方法中赋值,所以调用方法时不需要对实参进行初始化。
1 static void Main() 2 { 3 int x; //未初始化 4 DoInitialize(out x); 5 Console.WriteLine(x); //输出42 6 } 7 8 static void DoInitialize(out int param) 9 { 10 param = 42; 11 }
ref和out修饰符出了能应用于值类型的参数,还能应用于引用类型的参数。效果是完全一样的。参数将成为实参的一个别名,让参数引用一个新构造的对象,实际就是重新对实参进行赋值,让它改为引用那个对象。

浙公网安备 33010602011771号