使用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修饰符出了能应用于值类型的参数,还能应用于引用类型的参数。效果是完全一样的。参数将成为实参的一个别名,让参数引用一个新构造的对象,实际就是重新对实参进行赋值,让它改为引用那个对象。

posted @ 2013-04-10 21:58  Wesley Snipes  阅读(170)  评论(0)    收藏  举报