c#发展

注册

 

发新话题 回复该主题

C方法参数修饰符in,out,ref [复制链接]

1#
北京看白癜风去哪家医院最好 https://yyk.39.net/bj/zhuanke/89ac7.html

in,out,ref都可能作为方法参数据修饰符,从字面意思可就可以理解这三个关键字的含义,那用法是什么样子的呢,通过demo来看一下。

定义一个引用类型Order

publicclassOrder{publicstringOrderNo{get;set;}publicoverridestringToString(){returnOrderNo;}}

in参数用法:

Console.WriteLine("in参数只能从外部把值传入方法内部使用");vari=10;InMethod01(ini);Console.WriteLine("外:{i}");//InMethod01(in10);//错误,in后不能是实际的数据//可以直接传入数据InMethod01(10);//order内的OrderNo传入方法内部有可能被改掉,但order不可以被替换varorder=newOrder{OrderNo="O"};InMethod02(inorder);Console.WriteLine("外:{order}");//InMethod02(innewOrder{OrderNo="abcd"});//错误,in后不能是实际的数据//可以直接传入数据InMethod02(newOrder{OrderNo="O"});//inti1;//Orderorder1;//InMethod03(inorder1ini1);//错误,不能是没有赋值的变量inti1=1;Orderorder1=newOrder(){OrderNo="O"};//方法的参数列表中可以有多个inInMethod03(inorder1,ini1);//错误,不能是没有赋值的变量InMethod03(newOrder{OrderNo="O"},20);staticvoidInMethod01(ininti){//i=10;//错误Console.WriteLine("内:{i}");}staticvoidInMethod02(inOrderorder){//order=newOrder();//错误order.OrderNo="O";//正确,这里可以参数成员赋值Console.WriteLine("内:{order}");}staticvoidInMethod03(inOrderorder,ininti){//i=10;Console.WriteLine("内:{i}");//order=newOrder();//错误//order.OrderNo="O";//正确,这里可以参数成员赋值Console.WriteLine("内:{order}");}

out参数用法:

Console.WriteLine("out参数,是从方法内部把数据带出来");//定义调用一起OutMethod01(outinti1);Console.WriteLine("外:{i1}");//定义调用分开inti2=20;//即使赋值,方法内部接收不到OutMethod01(outi2);Console.WriteLine("外:{i2}");//定义调用一起OutMethod02(outOrderorder1);Console.WriteLine("外:{order1}");//定义调用分开Orderorder2;OutMethod02(outorder2);Console.WriteLine("外:{order2}");//多个out同时存在OutMethod03(outOrderorder3,outinti3);Console.WriteLine("外:{order3}");Console.WriteLine("外:{i3}");Orderorder4;inti4=20;//这里的20是能传入OutMethod03中的,但在方法内部,不能在给i赋值前使用OutMethod03(outorder4,outi4);Console.WriteLine("外:{order4}");Console.WriteLine("外:{i4}");//带有out的参数,在方法内即使有值,也能不使用,只有赋值后才能使用staticvoidOutMethod01(outinti){//Console.WriteLine(i);//错误i=10;Console.WriteLine(i);}staticvoidOutMethod02(outOrderorder){//Console.WriteLine(order);//错误order=newOrder{OrderNo="O"};Console.WriteLine(order);}staticvoidOutMethod03(outOrderorder,outinti){//Console.WriteLine(i);//错误//Console.WriteLine(order);//错误i=10;order=newOrder{OrderNo="O"};Console.WriteLine(i);//错误Console.WriteLine(order);//错误}

ref参数用法:

Console.WriteLine("ref参数,即能把外部的数据传入,也能把方法里的参数变化值传出,这里更多的是把参数转成一个引用,穿透方法内外共享");//RefMethod01(ref10);//错误,这里只能传入一个变量,不能是具体的数据//inti1;//错误,ref要求传入必须有值//RefMethod01(refi1);//错误inti1=1;RefMethod01(refi1);Console.WriteLine("外:{i1}");varorder1=newOrder{OrderNo="O"};RefMethod02(reforder1);Console.WriteLine("外:{order1}");Orderorder2=newOrder{OrderNo="O"};inti2=1;RefMethod03(reforder2,refi2);Console.WriteLine("外:{order2}");Console.WriteLine("外:{i2}");staticvoidRefMethod01(refinti){Console.WriteLine("前:{i}");i=10;Console.WriteLine("后:{i}");}staticvoidRefMethod02(refOrderorder){Console.WriteLine("前:{order}");order=newOrder{OrderNo="O"};Console.WriteLine("后:{order}");}staticvoidRefMethod03(refOrderorder,refinti){Console.WriteLine("前:{i}");Console.WriteLine("前:{order}");i=10;order=newOrder{OrderNo="O"};Console.WriteLine("后:{i}");Console.WriteLine("后:{order}");}技术群:添加小编

分享 转发
TOP
发新话题 回复该主题