黑马程序员技术交流社区

标题: ref在函数中如何使用? [打印本页]

作者: 风雪再现    时间: 2013-4-17 15:05
标题: ref在函数中如何使用?
本帖最后由 风雪再现 于 2013-4-24 12:14 编辑

在写函数的时候,有时候在参数前需要加入ref,请问加ref之后函数的使用有什么特别之处?希望回复能用代码举例子,因为水平比较次,需要借助代码理解,谢谢。

作者: 贡宗新    时间: 2013-4-17 15:23
ref修饰符声明的参数是引用参数,与值参数不同,引用参数并不创建存储位置,引用参数表示存储位置就是在方法调用中,就是引用变量或对象的存储空间
,引用参数即能将值带进方法,也能将方法带出方法,变量在引用参数传递之前,必须先明确赋值,在方法内部引用参数与始终被认为是已经明确赋值的,你代码运行一下,然后看一下上面的讲解就ok了
  1. using System;

  2. class Test
  3. {
  4.     static void Swap(ref int x, ref int y)
  5.     {
  6.         Console.WriteLine("进入Swap时:x={0},y={1}",x,y);
  7.         int temp = x;
  8.         x = y;
  9.         y = temp;
  10.         Console.WriteLine("退出Swap时:x={0},y={1}", x, y);
  11.     }

  12.     static void Main()
  13.     {
  14.         int i = 1, j = 2;
  15.         Console.WriteLine("执行Swap前:x={0},y={1}", i, j);
  16.         Swap(ref i, ref j); ;
  17.         Console.WriteLine("执行Swap后:x={0},y={1}", i, j);
  18.         
  19.     }
  20. }
复制代码

作者: 梁思思    时间: 2013-4-17 16:01
ref 参数:侧重于将值带入一个方法中,再将值从这个方法中带出  ref参数要求在方法为必须赋值。
因为n1和n2都是值类型,没有加ref,两个值都没有交换。而使用ref 关键字使参数按引用传递。当你学习到值类型与引用类型的区别就知道了。。。
  1. namespace _ref参数
  2. {
  3.     class Program
  4.     {

  5.         static void Main(string[] args)
  6.         {

  7.             //ref 参数:侧重于将值带入一个方法中,再将值从这个方法中带出,ref参数要求在方法中必需赋值。
  8.             int n1 = 10;
  9.             int n2 = 20;
  10.             Change(ref n1,ref  n2);
  11.             Console.WriteLine(n1);
  12.             Console.WriteLine(n2);
  13.             Console.ReadKey();
  14.         }


  15.         public static void Change(ref int number1, ref int number2)
  16.         {
  17.             int temp = number1;
  18.             number1 = number2;
  19.             number2 = temp;
  20.         }
  21.     }
  22. }
复制代码

作者: 风雪再现    时间: 2013-4-18 09:36
贡宗新 发表于 2013-4-17 15:23
ref修饰符声明的参数是引用参数,与值参数不同,引用参数并不创建存储位置,引用参数表示存储位置就是在方 ...

谢谢,还不是很明白,只是知道怎么用,不理解:P
作者: 风雪再现    时间: 2013-4-18 09:36
梁思思 发表于 2013-4-17 16:01
ref 参数:侧重于将值带入一个方法中,再将值从这个方法中带出  ref参数要求在方法为必须赋值。
因为n1和n2 ...

谢谢,还不是很明白,只是知道怎么用,不理解:P
作者: 刘欢    时间: 2013-4-18 11:31
我也不太熟悉out 和 ref,我是这么理解的:有两个传真机一个代表Main方法,一个代表X方法。out表示X传真机把一张文件(必须赋值的变量,只有发送数据的功能),发送到Main传真机,Main传真机来接收,并张贴出来。ref表示两个传真机都有收发功能,Main传真机先把一个文件发送到X传真机,然后X方法经过处理,盖好章后,再回传给Main,然后章贴出来。
楼上的代码和解释正解,这是我的理解不知道对不对,希望对你有帮助。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2