关于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的情况就是有进有出,本来应该得到的结果也被送出来