ref和out

Posted 坚持

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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侧重于对于一个方法返回多个值

 

以上是关于ref和out的主要内容,如果未能解决你的问题,请参考以下文章

.NET 中 ref 和 out 参数之间的区别 [重复]

C# 中的 Lambda 和 ref/out

ref和out的区别,值类型和引用类型的使用

C# out ref 用法总结

浅谈c#的三个高级参数ref out 和Params

浅谈c#的三个高级参数ref out 和Params