简介:
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的作用与区别,希望对大家有所帮助。在此也非常感谢大家对脚本之家网站的支持!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?