C#总结---方法的out参数和ref参数

本文详细介绍了C#中的out和ref参数的使用方法及其区别。通过具体示例展示了这两种参数如何帮助解决方法间多个不同类型值的传递问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们知道,在c#中,当我们在一个方法中想要访问另一个方法中的变量的时候,有两种解决方案---参数和返回值。但当需要返回多个值,并且是不同类型的值的之后应该怎么办呢?解决方案可以是

(1)将所有类型数据转换成字符串类型,到最后再都转换回来,这样就比较麻烦了

(2)利用方法的out参数和ref参数

下面要跟大家介绍的就是第二个简单的方法:方法的out和ref参数

在讲解方法的out和ref参数之前我们先看看最普通的参数传递

[csharp]  view plain  copy
  1. static void Main(string[] args)  
  2. {  
  3.     int number1=10;  
  4.     int number2 = 20;  
  5.     int sum = AddNumber(number1, number2);  
  6.   
  7.     Console.WriteLine(number1); ;  
  8.     Console.WriteLine(number2);  
  9.     Console.WriteLine(sum);  
  10.   
  11.     Console.ReadKey();  
  12. }  
  13. public static int AddNumber( int num1, int num2)  
  14. {  
  15.     return num1 + num2;  
  16. }  

显而易见,此程序的返回值是10,20,30

方法的out参数(与最简单的参数传递差别已用红框标出)


此程序的返回值为10,200,210

概念:out是内部为外部变量赋值,out一般用在函数需要有多个返回值的场所

总结:1.如果方法用参数out修饰了,那么参数在方法外也要用out修饰

           2. 如果方法的参数用out修饰了,那么这个参数必须在方法里进行赋值

           3.当参数在方法外进行赋值时,参数out把方法里的值传到了方法外,所以最后参数值为在方法里赋的值

例题1:

[csharp]  view plain  copy
  1. static void Main(string[] args)  
  2. {  
  3.     int number1=10;  
  4.     int number2;  
  5.     int sum = AddNumber( number1, out  number2);  
  6.   
  7.     Console.WriteLine(number1); ;  
  8.     Console.WriteLine(number2);  
  9.     Console.WriteLine(sum);  
  10.   
  11.     Console.ReadKey();  
  12. }  
  13. public static int AddNumber(int  num1, out  int num2)  
  14. {  
  15.     num1 = 100;  
  16.     num2 = 200;  
  17.     return num1 + num2;  
  18. }  
此程序的返回值为什么呢???

开始我理所应当的认为,此程序的返回值为100,200,300,但是大家再仔细看一看,num1没有用out修饰哦,这可是一个大坑哦!

所以,最后的结果是10,200,210

方法的ref参数(与最简单的参数传递差别已用红框标出)


此程序的返回值为10,200,210

很容易可以看出,方法的out和ref只是修改参数,那么他们最后的返回值是相同的

总结:1.如果方法用参数out修饰了,那么参数在方法外也要用out修饰

           2.如果方法用参数ref修饰了,那么参数在方法外必须赋初值

那么当这种情况呢?

例题2:

[csharp]  view plain  copy
  1. static void Main(string[] args)  
  2. {  
  3.     int number1=10;  
  4.     int number2=20;  
  5.     int sum = AddNumber( number1, ref number2);  
  6.   
  7.     Console.WriteLine(number1); ;  
  8.     Console.WriteLine(number2);  
  9.     Console.WriteLine(sum);  
  10.   
  11.     Console.ReadKey();  
  12. }  
  13. public static int AddNumber(int  num1, ref int num2)  
  14. {  
  15.     num1 = 100;  
  16.     num2 = 200;  
  17.     return num1 + num2;  
  18. }  
例题1和例题2,只有num2修饰的差别,例题1用的是out修饰,返回值为10,200,210;

例题2用的是ref修饰,返回值为100,200,300;

由此可以看出参数out和ref修饰的差别:

1). ref的使用:使用ref进行参数的传递时,该参数在创建时,必须设置其初始值,且ref侧重于修改

2). out的使用:使用out参数传递时,该参数在创建时,可以不设置初始值,但是在方法中必须初始化,out侧重于输出

3). out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。

  ref是传递参数的地址,out是返回值

  使用ref前必须对变量赋值,out不用。

  ref是传入值,out是传出值

参数传递几种方式总汇:

      传值(by value),传址(by reference),输出参数(by output),数组参数(by array)。

      传值参数无需额外的修饰符——传值参数在方法调用过程中如果改变了参数的值,那么传入方法的参数在方法调用完成以后并不因此而改变,而是保留原来传入时的值

      传址参数需要修饰符ref——传址参数恰恰相反,如果方法调用过程改变了参数的值,那么传入方法的参数在调用完成以后也随之改变

      实际上从名称上我们可以清楚地看出两者的含义--传值参数传递的是调用参数的一份拷贝,而传址参数传递的是调用参数的内存地址,该参数在方法内外指向的是同一个存储位置。

      输出参数需要修饰符out——方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中

      数组参数需要修饰符params。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值