out 、ref 、params在方法中很基础同时很常用,项目中经常出现,但是我发现好多三年多工作经验的人居然在思考的时候没想过用这一基础的知识,导致项目设计起来很笨拙,原因我发现是因为很多人不清楚概念。
解决了什么问题呢?
out :
其实只要思考一句话:
当一个函数(方法)想要输出多个值的时候,返回多个值 如何返回多个值?
方法一: 新建一个数组,将数组赋值,返回数组。
方法二:使用out关键字 :
比如求一个数组的最大值、最小值、和
1、定义变量
int[] nums=new int[]{1,2,3,4,5};
int max;
int min ;
int sum;
//2、调用方法
GetMaxMinSum(nums,out max,out min ,out sum); //调用
//3、方法
void GetMaxMinSum(int[] nums,out int max,out int min,out int sum))
如此,便不需要有返回值。
原理: 当定义max=5时,开辟了内存空间, out 参数 给max参数传递为引用传递。
为什么out参数能修改main函数的值:因为修改的是引用地址的值。
使用规则:out 参数在函数的内部必须为其赋值,函数的外部可以不为其赋值。(定义一个桶,进入函数打一桶水出来)。
ref :
使用规则: 带一个值进入,改变完之后带一个值出来,都是引用传递,传递的都是地址。(带一个值进去改变)。
定义开辟地址,传递到方法中直接指向ref地址,改变的是值。
params:
作用:将实参列表中的形参列表中跟形参列表中类型一致的元素当成数组中的元素。(看不懂没关系,看一下下面的例子)
如果有一个需求:实现任意整数的相加,调用方法的时候根本不能定义那么多个重载。所以衍生了param
一、一种参数:
//调用
int sum=Add(1,2,3,3,4,5,5,4,2);
//方法
public static int Add(params int [] num)
{
}
int[] 为整数类型,将上面的n个数据,会自动封装为int类型的数组。
规定:
1、params必须是形参类表中的最后一个参数。
2、params只能有一个在参数中。
二、那么现在看一下多个参数怎么用:
//调用
int sum=Add( “abc”1,2,3,3,4,5,5,4,2);
//方法
public static int Add(string str,params int [] num)
{
}
params 是一个语法糖,底层其实就是多个object类型的重载。