介绍

给方法传递普通参数时,值类型传递的是拷贝的对象,而引用类型传递的是对象的引用。它们都不能在函数内部直接修改外部变量的引用(不是修改引用类型的属性),而使用 ref 或 out 关键字就可以实现。

作用

ref:在方法内部修改外部变量的引用。

out:方法内部给外部变量初始化,相当于一个函数多个返回值。

注意事项:

  1. 使用 ref 修饰参数时,传入的参数必须先被初始化,方法中可以不复制。而对 out 而言,必须在方法中对其完成初始化,在方法外部不用初始化。
  2. 使用 ref 和 out 时,在执行方法时,参数前都需要加上 ref 或 out 关键字。
  3. 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相关推荐

  1. C#基础4:函数+ref和out参数

    PS:注释和讲解全在代码中 1. 简单函数 文档注释作用图: using System; using System.Collections.Generic; using System.Linq; us ...

  2. 内核常见锁的机制与实现分析1

    今天讨论下内核常见锁的机制与实现分析. 第一个问题内核何时会发生临界资源的竞争访问? 对于非抢占UP(uni processor)内核只有一种情况会发生竞争, 即高优先级异常/中断处理函数抢占内核线程 ...

  3. 大智慧新一代公式编写教程

    1.在条件选股中点击"新建": 2.原来MA5:MA(CLOSE,5): 表示的是一条指标线,可是现在我们在条件选股当中只要引用它,不需要把它画出来.所以我们在冒号的后面加一个符号 ...

  4. Open Policy Agent

    一.opa The Open Policy Agent (OPA, pronounced "oh-pa") is an open source, general-purpose p ...

  5. ZEMAX | 在OpticStudio中通过几何光线追迹来模拟杨氏双缝干涉实验

    这篇文章旨在介绍杨氏双缝干涉实验背后的理论知识,并在OpticStudio中用几何光线追迹模拟该实验,最后比较理论和模拟的结果. 下载 联系工作人员获取附件 简介 杨氏双缝干涉实验是物理学中最著名的实 ...

  6. 大智慧重要函数应用教程

    大智慧引用函数SUM的运用 函数:SUM(X,N) 参数: X为数组,N为计算周期 说明:统计N周期中X的总和,N=0则从第一个有效值开始. 示例:SUM(VOL,0) 表示统计从上市第一天以来的成交 ...

  7. 【Vue】1308- Vue3 中可以帮助你早点下班的 9 个开发技巧

    推荐 推荐阅读: [Vuejs]1286- 分享 15 个 Vue3 全家桶开发的避坑经验 序 vue3也发布很长时候了,官方也将默认版本切换为vue3,而且也出现了完善的中文文档[1],不知同志们是 ...

  8. vue 父子组件间通信

    前言 在vue项目中,封装组件,涉及到父子组件的传值,本文主要讲解父子组件之间传值的方法. 一.props / $emit 适用于父子组件通信,单向数据流,这种方法是 vue 组件的基础. 二.ref ...

  9. 在 vue3 中使用 markdown 编辑器 md-editor-v3

    本文将介绍编辑器的使用和伴随的某些开发技巧. 该编辑器支持的功能有:基础的md编辑.md语法快捷键.记录保存.暗黑主题.图片上传/复制图片上传/裁剪图片上传.格式化内容.浏览器全屏/屏幕全屏.仅预览模 ...

最新文章

  1. Activity的4种启动模式
  2. 数码管字体属于什么字体_photoshop里这方法就能知道图片上文字使用的是什么字体...
  3. Django--视图函数
  4. 设计模式----单例模式实例
  5. C++你不知道的那些事儿—C++语言的15个晦涩特性
  6. [网络安全自学篇] 三十三.文件上传之绕狗一句话原理和绕过安全狗(六)
  7. Docker(五)如何构建Dockerfile
  8. .NET-记一次架构优化实战与方案-前端优化
  9. 识别产品外观的合格软件_产品外观质量视觉检测系统.PDF
  10. 当红开发语言Go,真的是未来的技术主流吗?
  11. 游戏盾 > 产品简介 > 产品优势
  12. 初学者一些常用的SQL语句(二)
  13. IT服务管理、IT运维管理、IT运营管理
  14. Java实现简单的银行管理系统(最基本的功能/易上手)
  15. double转int方法为 去尾法
  16. HTML5 水平线标签 hr
  17. 网易微专业python全栈工程师_Python 的工作已经饱和?那是因为你只会 Python
  18. Babel 学习日记(0)
  19. 如何利用CRM软件建立有利可图的客户关系?
  20. Requests+Etree+BeautifulSoup+Pandas+Path+Pyinstaller应用 | 获取页面指定区域数据存入html、excel文档

热门文章

  1. [linux] 多进程和多线程
  2. PIE SDK剔除栅格块算法
  3. .net 零碎点梳理
  4. Python title() 方法
  5. vue中的dom基本渲染
  6. FFMPEG结构体分析:AVCodecContext(转)
  7. vmware centos 7 刚装上不能上网
  8. 分割视图控制器(UISplitViewController)
  9. create tablespace 与 heap_insert 函数
  10. 我曾经得到的一个最好的编程建议