C# ref & out关键字

C# ref  & out关键字
  
ref关键字
  ref 关键字会导致参数通过引用传递,而不是通过值传递。 通过引用传递的效果是,对所调用方法中的参数进行的任何更改都反映在调用方法中。例如,如果调用方传递本地变量表达式或数组元素访问表达式,所调用方法会将对象替换为 ref 参数引用的对象,然后调用方的本地变量或数组元素将开始引用新对象。
 
ref关键字的使用
若要使用 ref 参数,方法定义和调用方法均必须显式使用 ref 关键字,如下面的示例所示:
 1  class Program
 2     {
 3         static void Ride(ref int num)
 4         {
 5             num = num * 10;
 6         }
 7 
 8         static void Main(string[] args)
 9         {
10             int num = 10;
11             Ride(ref num);
12             Console.WriteLine(num);//结果为100
13         }
14     }
  • ref关键字是用来修饰方法的参数的
  • 在调用的时候。在为被ref修饰的形参传值的时候,实参前面也必须要用ref修饰。
  • 传值的时候,传递的不是实参变量的值,传递的是实参变量的地址。这个时候在方法的内部,修改ref形参的值,其实改的是实参变量的值。
  • 实参必须是1个变量,不能是1个常量。因为传递的时候传的是变量的地址,而不是值。
  最大的作用是:可以在方法的内部去修改调用者的变量的值。实际上,我们发现ref传递以后,实参ref和形参ref 就是同1个变量. 这个时候 在方法的内部,修改ref形参的值 就是修改实参变量的值 因为本质上他们是同1个变量。
 
out关键字  
  out 关键字通过引用传递参数。这与 ref 关键字相似,只不过 ref 要求在传递之前初始化变量。若要使用 out 参数,方法定义和调用方法均必须显式使用 out 关键字。
 
out关键字的使用
 1     class Program
 2     {
 3         static void Add(out int num)
 4         {
 5             num = 10;
 6             num += 10;
 7         }
 8 
 9         static void Main(string[] args)
10         {
11             int num;
12             Add(out num);
13             Console.WriteLine(num);//结果为20
14         }
15     }
  • out关键字是用来修饰方法的参数的。调用的是,实参的时候,实参必须是1个变量,并且实参也是被out修饰。
  • 如果加了out关键字,那么在传递的时候,传递的不是实参变量的值,而是实参变量的地址。所以在方法的内部,修改out形参,实际上修改的是调用者的实参变量的值。
  • 实际上,我们发现out传递以后,实参out和形参out就是同一个变量。这个时候 在方法的内部,修改out形参的值,就是修改实参变量的值,因为本质上他们是同个变量。
      out最大的作用是:可以在方法的内部更改调用者的变量的值。当我们需要向调用者返回多个数据的时候,就可以用它。
 
ref与out的区别
  • ref在方法的内部可以为其赋值,也可以不赋值。out要求在方法结束之前必须为它赋值。
  • ref实参变量在传递之前,要求必须有初始值,因为在方法的内部有可能会使用它的值。
  • out实参变量在传递之前,可以没有初始值,因为在方法的内部一定会为它赋值的。
  • out在方法中,使用之前,必须为其赋值。
  • ref侧重于修改,out侧重于输出。
 
什么时候用ref关键字,什么时候用out关键字?
  • 如果方法的内部有可能返回多个数据,那么我们就可以使用ref。
  • 如果方法一定会返回多个数据,那么我们就可以使用out。
  • 但是ref是可以用在任意的场合的。
 
posted @ 2015-08-09 22:33  Chen_Weifeng  阅读(255)  评论(0编辑  收藏  举报