一.ref和out的作用
在C#中通过使用方法来获取返回值时,通常只能得到一个返回值。因此,当一个方法需要返回多个值的时候,就需要用到ref和out。(简单说ref和out可以使得方法可以返回多个返回值)
二、ref和out的区别
概述:
ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。
out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。
相同点:
1、都能返回多个返回值。
2、若要使用 ref 和out参数,则方法定义和调用方法都必须显式使用 ref和out 关键字。(也就是在定义和调用方法时参数前要有ref和out关键字)在方法中对参数的设置和改变将会直接影响函数调用之处(参数的初始值)。
不同点:
1、ref指定的参数在函数调用时候必须初始化,不能为空的引用。而out指定的参数在函数调用时候可以不初始化;
2、out指定的参数在进入函数时会清空自己,必须在函数内部赋初值。而ref指定的参数不需要。
口诀:
ref有进有出,out只出不进。
(ref和out参数前一定要有关键字!!!!)
三、代码示例
1.ref的错误使用,未在使用前对参数赋值!
纠正代码:
using System; class prograss { static void Main(string[] args) { //使用ref输出关键字对参数赋值 int x=1; int y=1; prograss pg = new prograss(); pg.getvalue(ref x, ref y); Console.WriteLine(x+" "+y); Console.ReadKey(); } public void getvalue(ref int x, ref int y) { x = 1000; y = 100; } }
输出结果:
2、out错误使用未在内部赋值
错误纠正:
using System; class prograss { static void Main(string[] args) { //使用out关键字进行赋值 int m, n; pg.Setvalue(out m,out n); Console.WriteLine(m+" "+n); int u = 12; int p = 13; pg.Setvalue(out u, out p); Console.WriteLine(u + " " + p); Console.ReadKey(); } public void Setvalue(out int a, out int b) { a = 123; b = 521; int temp = a; a = b; b = temp; }
输出结果:
四、总结
1.ref和out使用时候一定要在参数前加关键字。
2.ref是在外部初始化,内部不需要再初始化。
3.out关键字一定要在内部初始化。(实参外部有没有初始化不影响)。