【C#】Out与ref是干什么的?

C# Return与Out、Ref详解
本文详细解析了C#中的return语句作用及用法,并深入探讨了out和ref关键字如何实现从方法中返回多个值。通过具体示例说明了out与ref的使用区别及其应用场景。

关于return:

1.最后没有写 return 语句的话,表示程序正常退出
2.不需要返回值时,存在return的作用
例子

void main()
{
	return; //return退出该程序的作用;如果在子函数中则代表返回主函数中
}
void main()
{
	return 0;//返回0表示正确的调用了该函数
}

3.需要返回值时存在return的作用

int main( int argc)
{
	//int  argc;函数调用的时候计算结果通常是通过返回值带出
}

终止函数执行的一种方式。当return语句提供了一个值时,这个值就成为函数的返回值.


return不能同时返回多个值

(除非是结构体、数组),想让它能够返回,怎么办?

用out和ref

1.方法中没有写返回值的的变量要想传到方法外:用out或ref
2. out 和ref后面的内容不能称为参数;
因为参数的作用:传进来值并参与运算形成最后唯一的return结果
所以这里
out |ref 【变量】
只是为了返回多个变量而产生的机制,最终返回的结果还是一个值。


out 和ref的区别

static void Main(string[] args)//主方法
{
	int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	int max = 0;
	int min;
	int sum = ArraySum(nums, out max, out min);
}
 public static int ArraySum(int []numbers,out int max,out int min)//调用方法的过程中要给这些参数
{
     max = int.MinValue;
     min = int.MaxValue;
     int sum = 0;
     for (int i = 0; i < numbers .Length ; i++)
     {
         if(numbers[i]>max)
         {
              max = numbers[i];
         }
         if (numbers[i] < min)
         {
              min = numbers[i];
         }
         sum += numbers[i];
      }
      return sum;//但为什么返回值只有一个,不是要多个返回值吗?
            //虽然只有一个返回值,但有两个out,所以相当于有三个返回值
}

out 不管你在主方法中有没有给值,在方法中都会重新赋值的,所以即便在方法中赋了值,也会被改变的,因为最终的值是由定义了out的参数的方法决定的,但out需要在主方法中定义变量去接收,所以传到了主方法中由于重新的赋值,变量值和结果值会受影响。
所以不管你在主方法中怎样赋值,都不会对结果又影响,所以在主方法看起来这个变量的值好像只有传出的方向


ref必须在主方法中给值,到方法中可以从新赋值,也可以使用主方法中的值(没有在主方法中得到值的情况),并且隐含了主方法的变量用来接收值
所以,ref的传进传出是指,当在方法中没有重新赋值,可以传进来,并把原来赋值的结果传出去,就好像,有进有出。
但当ref方法中重新赋值的时候,就类似于out,只有传出


所以
标准的ref用法是在主方法中赋值,在方法中不赋值,
标准的out用法是在主方法中不赋值,在方法中赋值,

当:如果都在主方法中赋值
out的情况就是有进无出,本来的结果没有出来
ref的情况就是有进有出,本来应该得到的结果也被送出来

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值