Ref 把值传递变成引用传递
当调用一个方法时,传入的参数是一个值类型,那么需要方法将这个传入的值类型的变量值改变受到影响,我们可以使用ref 关键字进行处理实现。
观察一:
结论:
根据值类型和引用类型的特点,值类型是赋值,是复制传递的是栈上存储的具体值信息,如图实参变量"a"将100赋值给方法形参"num"变量。那么值类型的改变只会影响值的本身,形参的改变没有形象到变量"a"。
加上ref修饰形参:
结论:
通过ref关键字,此时传递变量a的时候,实参把引用传给了形参,那么说明了这两个变量将指向同一个引用地址,变量num在方法中的改变会影响到变量a
输出结果:101
使用ref关键字的时候需要注意:
1.用了ref关键的方法,必须在参数列表上加上ref关键字,在调用该方法的时候也要加上ref关键字。
2.作为传入修饰了ref的方法的实参变量,必须赋初始值
作用总结:如果想使一个值类型的变量,通过传入一个方法进行改变,可以使用ref
OUT 让方法返回多个值
从语法规则上来讲,一个方法只能有一个返回值,如果return多个值简直是天方夜谭,如图:
通过out的方式实现:
static void Main(string[] args)
{
int a ;
changeNum(out a);
Console.WriteLine(a); //结果为101
}
static stringchangeNum(out int num)
{
num = 100;
num++;
return "ok";
}
使用out关键字需要注意:
1.在方法定义和方法调用时,都要加上out关键字
2.方法参数列表上修饰了out关键字的变量,必须在方法体赋初始值,对于方法调用提供的实参变量可以不需要赋值。
面试题
ref与out的区别是什么?
使用ref的时候要传入相应方法的实参变量,必须赋值。而out在调用的时候只用声明,但是在方法内部,修饰了out形参必须赋值。
ref和out有着异曲同工之妙,都可以实现相同的功能,ref侧重于将值类型的值传递改变为引用传递,out侧重于对于一个方法返回多个值