黑马程序员技术交流社区

标题: ref和out传递的区别在哪里? [打印本页]

作者: Kaitong    时间: 2014-4-3 23:10
标题: ref和out传递的区别在哪里?
本帖最后由 Kaitong 于 2014-4-4 12:51 编辑

看到参数这一块,ref传递和out传递区别在哪,适用于那种情况?谢谢解答
作者: _Water    时间: 2014-4-3 23:18
ref和out二者既可以通过值也可以通过引用传递参数。
通过引用传递参数允许函数成员更改参数的值,并保持该更改。
若要通过引用传递参数, 可使用ref或out关键字。
ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。
它们的区别是:
1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。
2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。
3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。
总结一句话为:ref是有进有出,而out是只出不进。
作者: 回忆~坚    时间: 2014-4-3 23:24
ref在传递之前必须初始化,侧重于修改,“有出有进”,主要用在需要被调用的方法修改调用者的引用的时候;
out在传递之前可以不初始化,但是在方法内一定要赋值,out侧重于输出,“只出不进”,主要用在方法需要返回多个值的时候。
作者: 赵科铭    时间: 2014-4-4 08:54
ref :应用于 内部对外部变量的改变

out:应用于 多个返回值
作者: 酱悠先生    时间: 2014-4-8 15:58
方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。
若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。
不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。
属性不是变量,不能作为 out 参数传递。

方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
若要使用 ref 参数,必须将参数作为 ref 参数显式传递到方法。ref 参数的值被传递到 ref 参数。
传递到 ref 参数的参数必须最先初始化。将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。
属性不是变量,不能作为 ref 参数传递。

//上面的理解起来非常不好理解。下面我说说我自己的看法。

首先:两者都是按地址传递的,使用后都将改变原来的数值。很多人在论坛上解释说out是按数值传递,是错误的。简单的测试后可以知道out使用也能改变数值的,所以肯定是按照地址传递的。
其次:rel可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次。这个就是两个的区别,或者说就像有的网友说的,rel是有进有出,out是只出不进。经典!!!
作者: 惊风侠    时间: 2014-4-9 19:40
out主要用于传出参数,ref于传入参数




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