ref和out

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侧重于对于一个方法返回多个值

原文地址:https://www.cnblogs.com/green-jcx/p/5909047.html