A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 为梦而生 于 2013-11-29 20:40 编辑

我就是知道多个参数输出就用out,值改变了就用ref,但是一碰到实际问题的时候就想不起来,这个地方合不合使用,该不该用了。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
ref必须先初始化,因为是引用,所以必须先”有“,才能引用,而out则是内部为外部赋值,所以不需要初始化,而且外部初始化也没用。
ref应用场景内部对外部的值进行改变,out则是内部对外部变量赋值,out一般用在函数有多个返回值的场所。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1 赞一个!

查看全部评分

回复 使用道具 举报
1. ref必须先初始化,因为是引用,所以必须先“有”,才能引用;
2. out则是内部为外部赋值,所以不需要初始化,而且外部初始化也没有用;
3. ref应用场景内部对外部的值进行改变;
4. out则是内部为外部变量赋值;
5. out一般用在函数有多个返回值的场所。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0
楼上黑马帝解释的非常好
{:soso_e130:}
out和ref属于引用类型传递他们传的是内存地址不是传值.
ref 传递的参数是双向,可以传入也可以传出:
  1. class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             int iNumber = 100;
  6.             int iTemp =Test(ref iNumber);
  7.             Console.WriteLine("ref参数传出的值为a:{0}\nref传入后经方法retrun的值:{1}",iNumber,iTemp);            
  8.             Console.ReadKey();
  9.         }
  10.         static int Test(ref int iNum)
  11.         {            
  12.             int temp = iNum;//方法内可接收外部传入的值.
  13.             iNum = 50;
  14.             return temp;
  15.         }
  16.     }

复制代码

out传递参数是单向的只能传出值.当需要从一个方法中传出多个值时用.
  1.   class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             int iNumber;
  6.             Test(out iNumber);
  7.             Console.WriteLine("out参数传出的值是:{0}",iNumber);
  8.            
  9.             Console.ReadKey();
  10.         }
  11.         static void Test(out int iNum)
  12.         {
  13.             //int temp = iNum;//错误!
  14.             iNum = 50;        //out传入的参数要先赋值才能使用.
  15.             
  16.         }
  17.     }

复制代码


相同点:两者都是引用传递,都能改变要传递参数的值。
区别:
out修饰的参数在传递前可以不用赋初值,但在方法里必须先重新赋值。最后改变要传递参数的值,并返回。。即使传参前赋值,在方法里也不会被使用。
ref修饰的参数在传递前就要赋值,接收的参数无需重新赋值,就可以被方法里的代码调用。最后改变要传递参数的值,并返回。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1 很给力!

查看全部评分

回复 使用道具 举报
out  用于赋值
ref   用于运算
回复 使用道具 举报
通俗点说,你可以看看你要得到的结果在使用之前有没有赋值?有的话就用ref,没有就用out,例如你要得到a的值,你在使用之前看看a中有没有值,假如你定义一个int a=1,a中就已经有值了,就用ref,假如你定义一个int a,但你不知道该如何给a赋初始值,只是想到得运算后的结果赋值给a,就用out。
再简单点说,就是你在定义变量的时候发现可以给a赋一个有意义的初值时,就用ref,发现你无法给a赋初值,怎么附值都不对的时候,就用out。
这问题你遇到的时候自己试两遍,自己体会一下,2、3遍你就都明白了

评分

参与人数 1技术分 +1 收起 理由
V_John + 1 赞一个!

查看全部评分

回复 使用道具 举报
Coding 中级黑马 2013-11-29 20:18:35
7#
作为方法中参数的 关键字,使用ref关键字的参数,需要在调用方法予以赋值,使用out关键字的方法是在方法中赋值的。无论是两者中的哪一个,一般情况下,我们在调用过带有 这两种关键字参数的方法后,这些参数的值都会发生变化,具体的用途,根据自己的需要自行设定。比如,你需要返回多个参数,交换值等等。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马