C#如何一个方法实现多个返回值(out和ref的区别)
2016-07-17 00:00
323 查看
摘要: 写动态sql的时候想通过一个方法返回多个datatable,这样就避免每个datatable都重新写一个方法了。用C#的out和ref都可以实现多个返回值。out和ref的使用区别主要在于初始化参数的时机,一个必须在调用前就初始化(ref),一个在传递前初始化(out)
同一个方法内多个返回值out和ref都可以实现。都需要在调用之前定义参数,必须显式使用ref或者out关键字。区别在于ref必须在传递参数前就进行初始化。
这里可以看到sex没有使用out关键字会提示语法错误。同样ref也需要显式使用关键字
这里可以看到只是定义了name,sex,age而不初始化赋值,ref会报错“使用了未赋值的局部变量xxx”。给参数初始化赋值之后如下图
给3个参数赋初始值后,不再报错,运行也不会报错。
这里可以看到out关键字在传递前是不强制要求参数赋初始值的。而ref传递前不赋初始值会报错。不过当先调用TestOut()再调用TestRef()不会报错,因为out已经给参数赋值,再用ref就不会报错。如下图:
可以看到没有报错而且可以成功运行。
给每个out关键字的参数变量在返回前赋值,则正确:
<2>ref传进去的参数必须在调用前初始化,out不必
<3>ref传进去的参数在函数内部可以直接使用,而out不可
<4>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必须在离开函数体前进行赋值
相关文章推荐
- c#调用COM组件
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#实现给图片加水印的方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#中的delegate委托类型基本学习教程
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- 举例讲解C#中自动实现的属性
- C#中this的用法集锦
- C#数据结构之顺序表(SeqList)实例详解
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析
- C#比较二个数组并找出相同或不同元素的方法