1.用途:
在C#中通过使用方法来获取返回值时,通常只能得到一个返回值。因此,当一个方法需要多个返回值的时候,就需要用到ref和out
2.概述:
ref关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所作的任何修改都将反映在该变量中。若要使用ref参数,则方法定义和调用方法都必须显式使用ref关键字
out关键字会导致参数通过引用来传递。这与ref关键字类似,不同之处在于ref要求变量必须在传递之前进行初始化。若要使用out参数,方法定义和调用方法都必须显示使用out关键字
3.异同点
同:
1.都能返回多个返回值
2.若要使用ref和out参数,则方法定义和调用方法必须显示使用ref和out
关键字。在方法中对参数的设置和改变将会直接影响函数的调用之处
异:
1.ref指定的参数在函数调用的时候必须初始化,不能为空的引用。而out指定
的参数在函数调用时候可以不初始化
2.out指定的参数在进入函数时会清空自己,必须在函数内部赋初值。而ref指
定的参数不需要
4.口诀:
ref有进有出,out只出不进
5.实例
1 //ref传递参数之前必须赋初值 2 static void Main(string[] args) 3 { 4 int a = 10; 5 int b = 20; 6 GetValue(ref a, ref b); 7 Console.WriteLine($"{a} {b}"); 8 Console.ReadKey(); 9 } 10 static void GetValue(ref int x,ref int y) 11 { 12 Console.WriteLine($"{x} {y}"); 13 x = 50; 14 y = 60; 15 }
结果:
1 static void Main(string[] args) 2 { 3 //out在这里赋不赋值没影响 4 //int a = 10; 5 //int b = 20; 6 int a, b; 7 GetValue(out a, out b); 8 Console.WriteLine($"{a} {b}"); 9 Console.ReadKey(); 10 } 11 static void GetValue(out int x,out int y) 12 { 13 //out在方法内必须先赋值再用。 14 //Console.WriteLine($"{x} {y}"); 15 x = 50; 16 y = 60; 17 Console.WriteLine($"{x} {y}"); 18 }
结果: