C#关键字in、out、ref的作用与区别
作者:農碼一生
简介:
In:过程不会改写In的内容 ,默认的传递方式,即向函数内部传送值。
Out和out:传入的值不会被过程所读取,Out在传入的时候,参数的数值会清空,但过程可以写 。只出不进
ref:可以把参数的数值传递进函数 ,过程会读,会写 。有进有出。
一、In
In 关键字使参数按值传递。即向函数内部传送值。
例如:
using System; class gump { public double square(double x) { x=x*x; return x; } } class TestApp { public static void Main() { gump doit=new gump(); double a=3; double b=0; Console.WriteLine(\"Before square->a={0},b={1}\",a,b);//a=3,b=0; b=doit.square( a); Console.WriteLine(\"After square->a={0},b={1}\",a,b);//a=3,b=9; } }
二、ref
ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。
例如:
using System; class gump { public double square(double x) { x=x*x; return x; } } class TestApp { public static void Main() { gump doit=new gump(); double a=3; double b=0; Console.WriteLine(\"Before square->a={0},b={1}\",a,b);//a=3,b=0; b=doit.square( ref a); Console.WriteLine(\"After square->a={0},b={1}\",a,b);//a=9,b=9; } }
传递到 ref 参数的参数必须最先初始化。这与 out 不同,后者的参数在传递之前不需要显式初始化。
三、out
out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。若要使用 out 参数,方法定义和调用方法都必须显式使用out 关键字。
using System; class gump { public void math_routines(double x,out double half,out double squared,out double cubed) //可以是:public void math_routines(ref double x,out double half,out double squared,out double cubed) //但是,不可以这样:public void math_routines(out double x,out double half,out double squared, //out double cubed),对本例来说,因为输出的值要靠x赋值,所以x不能再为输出值 { half=x/2; squared=x*x; cubed=x*x*x; } } class TestApp { public static void Main() { gump doit=new gump(); double x1=600; double half1=0; double squared1=0; double cubed1=0; [Page] /* double x1=600; double half1; double squared1; double cubed1; */ Console.WriteLine(\"Before method->x1={0}\",x1); Console.WriteLine(\"half1={0}\",half1); Console.WriteLine(\"squared1={0}\",squared1); Console.WriteLine(\"cubed1={0}\",cubed1); doit.math_rountines(x1,out half1,out squared1,out cubed1); //此时的Out修饰的参数值均已经发生改变。 Console.WriteLine(\"After method->x1={0}\",x1); Console.WriteLine(\"half1={0}\",half1); Console.WriteLine(\"squared1={0}\",squared1); Console.WriteLine(\"cubed1={0}\",cubed1); } }
尽管作为 out 参数传递的变量不必在传递之前进行初始化,但需要调用方法以便在方法返回之前赋值。
class OutExample { static void Method(out int i) { i = 44; } static void Main() { int value; Method(out value); // value is now 44 } }
四、区别:
1.ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。
2.使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。
3.使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。
4.out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。
5.方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
以上所述是小编给大家介绍的C#关键字in、out、ref的作用与区别,希望对大家有所帮助。在此也非常感谢大家对脚本之家网站的支持!