C#基础加强(7)之ref与out
介绍
给方法传递普通参数时,值类型传递的是拷贝的对象,而引用类型传递的是对象的引用。它们都不能在函数内部直接修改外部变量的引用(不是修改引用类型的属性),而使用 ref 或 out 关键字就可以实现。
作用
ref:在方法内部修改外部变量的引用。
out:方法内部给外部变量初始化,相当于一个函数多个返回值。
注意事项:
- 使用 ref 修饰参数时,传入的参数必须先被初始化,方法中可以不复制。而对 out 而言,必须在方法中对其完成初始化,在方法外部不用初始化。
- 使用 ref 和 out 时,在执行方法时,参数前都需要加上 ref 或 out 关键字。
- out 适合用在需要 return 多个返回值的地方,而 ref 则用在需要被调用的方法修改调用者的引用时。
示例
例 1:交换两个变量的值:
internal class Program {public static void Main(string[] args){int i = 3;int j = 4;Swap(ref i,ref j);Console.WriteLine(i); // 4Console.WriteLine(j); // 3 }public static void Swap<T>(ref T obj1, ref T obj2){object temp = obj1;obj1 = obj2;obj2 = (T) temp;} }
例 2:自己实现 int.TryParse() 方法:
internal class Program {public static void Main(string[] args){string numStr1 = "abc";string numStr2 = "342";int result1;int result2;TryParse(numStr1, out result1);TryParse(numStr2, out result2);Console.WriteLine(result1); // -1Console.WriteLine(result2); // 342 }/*** 将字符串转换成一个 int 类型,以 out 参数 result 返回,如果出现异常,result 值为 -1*/public static void TryParse(string numStr, out int result){try{var num = Convert.ToInt32(numStr);result = num;}catch (Exception e){result = -1;}} }
转载于:https://www.cnblogs.com/zze46/p/10706397.html
C#基础加强(7)之ref与out相关推荐
- C#基础4:函数+ref和out参数
PS:注释和讲解全在代码中 1. 简单函数 文档注释作用图: using System; using System.Collections.Generic; using System.Linq; us ...
- 内核常见锁的机制与实现分析1
今天讨论下内核常见锁的机制与实现分析. 第一个问题内核何时会发生临界资源的竞争访问? 对于非抢占UP(uni processor)内核只有一种情况会发生竞争, 即高优先级异常/中断处理函数抢占内核线程 ...
- 大智慧新一代公式编写教程
1.在条件选股中点击"新建": 2.原来MA5:MA(CLOSE,5): 表示的是一条指标线,可是现在我们在条件选股当中只要引用它,不需要把它画出来.所以我们在冒号的后面加一个符号 ...
- Open Policy Agent
一.opa The Open Policy Agent (OPA, pronounced "oh-pa") is an open source, general-purpose p ...
- ZEMAX | 在OpticStudio中通过几何光线追迹来模拟杨氏双缝干涉实验
这篇文章旨在介绍杨氏双缝干涉实验背后的理论知识,并在OpticStudio中用几何光线追迹模拟该实验,最后比较理论和模拟的结果. 下载 联系工作人员获取附件 简介 杨氏双缝干涉实验是物理学中最著名的实 ...
- 大智慧重要函数应用教程
大智慧引用函数SUM的运用 函数:SUM(X,N) 参数: X为数组,N为计算周期 说明:统计N周期中X的总和,N=0则从第一个有效值开始. 示例:SUM(VOL,0) 表示统计从上市第一天以来的成交 ...
- 【Vue】1308- Vue3 中可以帮助你早点下班的 9 个开发技巧
推荐 推荐阅读: [Vuejs]1286- 分享 15 个 Vue3 全家桶开发的避坑经验 序 vue3也发布很长时候了,官方也将默认版本切换为vue3,而且也出现了完善的中文文档[1],不知同志们是 ...
- vue 父子组件间通信
前言 在vue项目中,封装组件,涉及到父子组件的传值,本文主要讲解父子组件之间传值的方法. 一.props / $emit 适用于父子组件通信,单向数据流,这种方法是 vue 组件的基础. 二.ref ...
- 在 vue3 中使用 markdown 编辑器 md-editor-v3
本文将介绍编辑器的使用和伴随的某些开发技巧. 该编辑器支持的功能有:基础的md编辑.md语法快捷键.记录保存.暗黑主题.图片上传/复制图片上传/裁剪图片上传.格式化内容.浏览器全屏/屏幕全屏.仅预览模 ...
最新文章
- Activity的4种启动模式
- 数码管字体属于什么字体_photoshop里这方法就能知道图片上文字使用的是什么字体...
- Django--视图函数
- 设计模式----单例模式实例
- C++你不知道的那些事儿—C++语言的15个晦涩特性
- [网络安全自学篇] 三十三.文件上传之绕狗一句话原理和绕过安全狗(六)
- Docker(五)如何构建Dockerfile
- .NET-记一次架构优化实战与方案-前端优化
- 识别产品外观的合格软件_产品外观质量视觉检测系统.PDF
- 当红开发语言Go,真的是未来的技术主流吗?
- 游戏盾 > 产品简介 > 产品优势
- 初学者一些常用的SQL语句(二)
- IT服务管理、IT运维管理、IT运营管理
- Java实现简单的银行管理系统(最基本的功能/易上手)
- double转int方法为 去尾法
- HTML5 水平线标签 hr
- 网易微专业python全栈工程师_Python 的工作已经饱和?那是因为你只会 Python
- Babel 学习日记(0)
- 如何利用CRM软件建立有利可图的客户关系?
- Requests+Etree+BeautifulSoup+Pandas+Path+Pyinstaller应用 | 获取页面指定区域数据存入html、excel文档