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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 苏波 高级黑马   /  2012-12-17 10:44  /  1969 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

既然有了ref 为什么还要用out,不如直接用ref,out 和ref有什么区别,二者有什么作用

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 刪除記忆ご 于 2012-12-17 10:55 编辑

区别:
使用ref前必须对变量赋值,out不用。
out的函数会清空变量,即使变量已经赋值也不行,退出函数时所有out引用的变量都要赋值,ref引用的可以修改,也可以不修改。
out类型参数是按地址传递,能改变原来的数值,使用out传参前,对变量可以赋值也可以不赋值。带有out类型参数的函数,会清空变量,所以在离开该函数的时候,所有out引用的变量都要赋值。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
ref可以把参数的数值传递进函数,但是out是要把参数清空...
所以无法把一个数值从out传递给一个方法中...而ref就不同了,他可以把参数的数值传递进函数...

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
通过ref传递的参数必须在调用之前被赋值。原因是接受这种实参的方法基于形参指向一个有效值的假设因此,使用ref关键字时,不能使用方法来给实参赋初始值。
out参数类似于ref参数,但有一点例外:它只能用于将值传出方法的情形。在调用方法之前,不必给作为out参数使用的变量赋初值。该方法将给变量赋值。而且,在方法内部,out参数被认为是为赋值的,即认为它没有初始值,这意味着方法必须在终止前给参数赋值。因此在调用方法之后,out参数将包含值。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
ref修饰参数,说明是引用的传递,也就是说在函数中对参数的操作会改变原来的值;out修饰参数,是说这个参数可以不被初始化,但在函数中一定要有赋值的语句。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须使用 ref 关键字。传递到 ref 参数的参数必须最先初始化。这与 out 不同,out 的参数在传递之前不需要初始化。属性不是变量,因此不能作为 ref 参数传递。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
ref参数修饰符是的变量可以创建按引用调用,而不是按值调用。在声明和调用方法时,需要使用ref修饰符。
out参数类似于ref参数,但有一点例外:它只能用于将值传出方法的情形。在调用方法之前,不必给作为out参数使用的变量赋初值。该方法将给变量赋值。而且,在方法内部,out参数被认为是为赋值的,即认为它没有初始值,这意味着方法必须在终止前给参数赋值。因此在调用方法之后,out参数将包含值。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
梦ing 中级黑马 2012-12-19 17:12:47
8#
ref仅仅是一个地址,引用传递,可以把值传递强制改为引用传递
out让函数可以输出多个值
ref必须先初始化,因为是引用,所以必须先“有”,才能引用,而
out则是内部为外部赋值,所以不需要初始化,而且外部初始化也
没用。
ref应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,
out一般用在多个函数有多个返回值的场所。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

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