同一个方法内多个返回值out和ref都可以实现。都需要在调用之前定义参数,必须显式使用ref或者out关键字。区别在于ref必须在传递参数前就进行初始化。
1.都需要显式使用
这里可以看到sex没有使用out关键字会提示语法错误。同样ref也需要显式使用关键字
2.调用传递参数之前(ref必须传递之前初始化)
(1)ref传递之前必须赋初始值
这里可以看到只是定义了name,sex,age而不初始化赋值,ref会报错“使用了未赋值的局部变量xxx”。给参数初始化赋值之后如下图
给3个参数赋初始值后,不再报错,运行也不会报错。
(2)Out关键字传递参数之前不强制要求先赋初始值
这里可以看到out关键字在传递前是不强制要求参数赋初始值的。而ref传递前不赋初始值会报错。不过当先调用TestOut()再调用TestRef()不会报错,因为out已经给参数赋值,再用ref就不会报错。如下图:
可以看到没有报错而且可以成功运行。
3.调用方法之后,方法传递参数时
(1)使用ref可以在调用的方法里不写任何参数,也可以赋值或者不赋值,都不会报错。如图:
(2)使用out,必须在调用的方法里赋值,否则报错。
给每个out关键字的参数变量在返回前赋值,则正确:
4.总结
<1>都必须显式使用ref、out关键字
<2>ref传进去的参数必须在调用前初始化,out不必
<3>ref传进去的参数在函数内部可以直接使用,而out不可
<4>ref传进去的参数在函数内部可以不被修改,但out必须在离开函数体前进行赋值