您的位置:首页 > 编程语言 > C#

C#如何一个方法实现多个返回值(out和ref的区别)

2016-07-17 00:00 323 查看
摘要: 写动态sql的时候想通过一个方法返回多个datatable,这样就避免每个datatable都重新写一个方法了。用C#的out和ref都可以实现多个返回值。out和ref的使用区别主要在于初始化参数的时机,一个必须在调用前就初始化(ref),一个在传递前初始化(out)

同一个方法内多个返回值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必须在离开函数体前进行赋值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息