黑马程序员技术交流社区

标题: ref和out [打印本页]

作者: 一切都好    时间: 2013-12-28 16:18
标题: ref和out
本帖最后由 一切都好 于 2013-12-28 21:13 编辑

参数传递中的ref和out关键字该如何理解
作者: No_why    时间: 2013-12-28 16:31
都是传参了  ref是将参数带到方法里      计算改变后再ref回去  传入的参数必须初始化 out在函数内部必须为其赋值
作者: 潘金锋    时间: 2013-12-28 17:10
从Java转过来的同学对此一开始会有困惑
引用参数不会为形参在栈上分配内存。实际上,形参的参数名将作为实参变量的别名,指向相同的内存位置。
输出参数用于从方法体内把数据传出到调用代码,有点类似返回值的意思。鉴于此,在方法内部,输出参数在能够被读取之前必须被赋值;在方法返回之前,方法必须为所有参数进行一次赋值。
作者: 诱惑灵魂    时间: 2013-12-28 17:56
要知道ref是必需要先初始化才能用,但调用时可以对它什么也不做.
out可以不初始化也能用,但调用时一定要对其赋值(即使已经初始化的也要赋值,哪怕是赋一个和原来一样的值).
out和ref都是传地址的,但是out只传出地址,传入地址是没有初始化的,而ref则是传入了已经初始化的地址,并且传出也是这个地址,所以ref可以传入也可以传出有意义的数据,但是out只能传出。
只要记住ref是有进有出,out是只出不进 就好写代码了
作者: 曹华    时间: 2013-12-28 20:16
ref  关键字会导致通过引用传递的参数,而不是值,引用参数的值与基础参数变量的值始终是一样的,传递给 ref 参数的参数必须初始化。
out  关键字会导致参数通过引用来传递,尽管作为 out 参数传递的变量不必在传递之前进行初始化,但被调用的方法需要在返回之前赋一个值。另外,当希望方法返回多个值时,声明 out 方法很有用。
最后说一点,通过引用传递参数(使用 ref 或 out)与通过引用类型传递参数的区别,前者没有由值类型到引用类型的封装过程,后者如果是将值作为引用类型传递,则先需要封装为引用类型。
个人感觉这种机制不易过多使用,会破坏程序的封装性,不利于维护。

作者: .NET初学者    时间: 2014-1-5 10:06
首先ref参数既可以传入值也可以传出值,而out参数只可以往外输出值。
ref参数传的是地址。
一般情况下考虑使用方法返回多个值时,会利用out参数进行往外传值




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