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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一切都好 中级黑马   /  2013-12-28 16:18  /  1913 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 一切都好 于 2013-12-28 21:13 编辑

参数传递中的ref和out关键字该如何理解

评分

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

查看全部评分

7 个回复

倒序浏览
都是传参了  ref是将参数带到方法里      计算改变后再ref回去  传入的参数必须初始化 out在函数内部必须为其赋值

评分

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

查看全部评分

回复 使用道具 举报
从Java转过来的同学对此一开始会有困惑
引用参数不会为形参在栈上分配内存。实际上,形参的参数名将作为实参变量的别名,指向相同的内存位置。
输出参数用于从方法体内把数据传出到调用代码,有点类似返回值的意思。鉴于此,在方法内部,输出参数在能够被读取之前必须被赋值;在方法返回之前,方法必须为所有参数进行一次赋值。

评分

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

查看全部评分

回复 使用道具 举报
要知道ref是必需要先初始化才能用,但调用时可以对它什么也不做.
out可以不初始化也能用,但调用时一定要对其赋值(即使已经初始化的也要赋值,哪怕是赋一个和原来一样的值).
out和ref都是传地址的,但是out只传出地址,传入地址是没有初始化的,而ref则是传入了已经初始化的地址,并且传出也是这个地址,所以ref可以传入也可以传出有意义的数据,但是out只能传出。
只要记住ref是有进有出,out是只出不进 就好写代码了

评分

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

查看全部评分

回复 使用道具 举报
ref  关键字会导致通过引用传递的参数,而不是值,引用参数的值与基础参数变量的值始终是一样的,传递给 ref 参数的参数必须初始化。
out  关键字会导致参数通过引用来传递,尽管作为 out 参数传递的变量不必在传递之前进行初始化,但被调用的方法需要在返回之前赋一个值。另外,当希望方法返回多个值时,声明 out 方法很有用。
最后说一点,通过引用传递参数(使用 ref 或 out)与通过引用类型传递参数的区别,前者没有由值类型到引用类型的封装过程,后者如果是将值作为引用类型传递,则先需要封装为引用类型。
个人感觉这种机制不易过多使用,会破坏程序的封装性,不利于维护。

评分

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

查看全部评分

回复 使用道具 举报
首先ref参数既可以传入值也可以传出值,而out参数只可以往外输出值。
ref参数传的是地址。
一般情况下考虑使用方法返回多个值时,会利用out参数进行往外传值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马