ref out 的区别
在C#中,ref与out是很特殊的两个关键字。使用它们,可以使参数按照引用来传递。
总的来说,通常我们向方法中传递的是值.方法获得的是这些值的一个拷贝,然后使用这些拷贝,当方法运行完毕后,这些拷贝将被丢弃,而原来的值不将受到影响.但是我们想让值受到改变怎么办呢?这就是ref 跟out的好处了。
先上例子吧:
1 int arg = 42; 2 AddMe(arg); 3 //结果为42,原因:值传递,传递的是一个复本,不对原来的值产生影响 4 MessageBox.Show("arg:"+arg); 5 6 //ref 使用 7 AddMe_Two(ref arg); 8 //结果43,原因ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中 9 MessageBox.Show("arg:" + arg); 10 11 //out 使用 12 int temp; 13 OutTest(out temp); 14 //结果42,原因out关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化 15 MessageBox.Show("temp:"+temp); 16 /// <summary> 17 /// out 18 /// </summary> 19 /// <param name="parm"></param> 20 public void OutTest(out int parm) 21 { 22 parm = 42; 23 } 24 /// <summary> 25 /// ref 26 /// </summary> 27 /// <param name="parm"></param> 28 public void AddMe_Two(ref int parm) 29 { 30 parm++; 31 } 32 33 public void AddMe(int parm) 34 { 35 parm++; 36 }
总结:
1.ref参数在使用前必需初始化,而out不需要
2.out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。