博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#如何一个方法实现多个返回值(out和ref的区别)
阅读量:6247 次
发布时间:2019-06-22

本文共 710 字,大约阅读时间需要 2 分钟。

hot3.png

同一个方法内多个返回值out和ref都可以实现。都需要在调用之前定义参数,必须显式使用ref或者out关键字。区别在于ref必须在传递参数前就进行初始化。

1.都需要显式使用

out显示

   这里可以看到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必须在离开函数体前进行赋值

转载于:https://my.oschina.net/CrazyBoy1024/blog/713159

你可能感兴趣的文章
as3 文本竖排效果实现
查看>>
Window下Eclipse+Tomcat远程调试
查看>>
夜间模式的开启与关闭,父模板的制作
查看>>
2016/4/19
查看>>
计算一元二次方程的根
查看>>
队列和栈
查看>>
升级了U3D引擎一下,苦逼了...
查看>>
Javascript中封装window.open解决不兼容问题
查看>>
100%会用到的angularjs的知识点【新手可mark】
查看>>
Alinq学习日志
查看>>
根据框架的dtd或xsd生成xml文件
查看>>
LeetCode Notes_#3 Longest Substring Without Repeating Characters
查看>>
MVP MVVM MVC
查看>>
[BZOJ3684]大朋友和多叉树
查看>>
【Linux 驱动】第九章 与硬件通信
查看>>
方便记忆的电话号码
查看>>
OSGMFC
查看>>
JQuery开发的lightBox控件实例
查看>>
linux 文件查找,which,whereis,locate,find
查看>>
c c++ 宏定义中#, ##, #@的含义
查看>>