现在我们要实现交换2个数的值,由于在程序中经常用到,所以封装到函数中

代码如下

1 /// <summary>2 /// 交换2个数的值3 /// </summary>4         static public void Swap(int x1, int x2)5         {6             int temp = x1;7             x1 = x2;8             x2 = temp;9         }

在打印出2个数的值

1  static void Main(string[] args)2         {3             int x1 = 10;4             int x2 = 20;5             Swap(x1, x2);6             Console.WriteLine("x1={0},x2={1}", x1, x2);7         }

结果如下:

x1=10

x2=20

2个数并没有发生变化,原因在于我们传递给函数的是x1,x2的复制品,所以在swap函数内部的复制品的变化,不会影响到main函数的x1,x2的值(值变量做函数的参数时,传递的都是值的复制),如果我们想在函数内部的参数变化直接影响到外部,那么我们就要用到关键字ref(reference--引用)。

现在我们队程序稍作改变:

1 /// <summary>2 /// 交换2个数的值3 /// </summary>4         static public void Swap(ref int x1,ref int x2)5         {6             int temp = x1;7             x1 = x2;8             x2 = temp;9         }

在打印出2个数的值:

1  int x1 = 10;2             int x2 = 20;3             Swap(ref x1, ref x2);4             Console.WriteLine("x1={0},x2={1}", x1, x2);5             Console.ReadKey();

结果如下:

x1=20

x2=10

总结下:

ref与out的主要区别在于,在.net中函数只能有且只有一个返回值,但是有时我们需要函数返回多个返回值,那要怎么办呢?于是out就派上用场了,而out在函数外被赋值也是白搭,就相当于返回值没有必要被赋值一样,它值负责返回数据,out函数在函数中必须被赋值,这就相当于函数的返回值行为很相像。其实他们就是一回事

而ref就是使值变量由传递的副本变为自身,也就是值传递变为引用传递而已...

ref必须先初始化,因为是引用,所以必须先“有”,才能引用,而out则是内部为外部赋值,所以不需要初始化,而且外部初始化也没用。
ref应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所。
案例:两个变量的交换;int.TryParse。

例子:int.TryParse函数

具体代码就不写了

转载于:https://www.cnblogs.com/shysky77/archive/2011/12/08/2280424.html

ref out的用法相关推荐

  1. react的ref三种用法

    第一种 字符串的ref ref="myRef" 里面的绑定是字符串的绑定用法,这种ref的形式写多了影响效率问题,官方文档已经不推荐此写法 //创建类式组件class Demo e ...

  2. vue组件通信。prop,ref,emit的用法与区别

    前言 相信对于很多vue初学者来说,看到组件通信这块的时候,跟我一样懵逼,完全摸不清啥是啥,搞到最后,连父子组件都区分不清了. 下面这篇文章就是我对vue父子组件通信的研究,写的比较啰嗦,但是,对于一 ...

  3. Vue2中ref属性的用法

    最近写东西遇到了莫名其妙的问题,用ref属性原以为它会获得一个数组http://www.jianshu.com/p/05c863ec2a23 // html <ul><li ref= ...

  4. 【ExcelPlanet】SUMPRODUCT函数用法:单条件、多条件、模糊条件求和与计数

    欢迎来到ExcelPlanet,今天我们来聊聊一个"真香"的求和函数:SUMPRODUCT.因为涉及到数值概念,导致一开始可能会有入门障碍.但其实理解之后,在统计报表等方面的功能非 ...

  5. vue3 效率的提升、composition-api 和 ref 详解

    vue3 效率的提升.composition-api 和 ref 详解 文章目录 vue3 效率的提升.composition-api 和 ref 详解 vue3 效率的提升 优化diff算法 hoi ...

  6. Spring的Bean属性依赖注入

    属性依赖注入的三种方式 什么是Bean属性的注入?就是对一个对象的属性赋值.有三种方式: 第一种:构造器参数注入 第二种:setter方法属性注入(setter方法的规范需要符合JavaBean规范) ...

  7. 秋招斩获所有互联网大厂面经之前端

    1 flash和js通过什么类如何交互? ExternalInterface ----------------------------------- 2 call和apply: -apply传入的是一 ...

  8. 前端面经 300条,背完这些就够了!

    前沿 确实有些标题党哈,但是确实是本人秋招之间总结的经验,前端岗位,会很多也不行,有时候秋招就是面试官看你的知识广度和深度,特别是前端的岗位,设计的方方面面太多了,只有提前准备好,理解好,然后背下来, ...

  9. FreeMarker Thymeleaf - 前端模板引擎

    FreeMarker 概述 FreeMarker是一种模板引擎(基于模板和要改变的数据),主要用于MVC中的view层,生成html展示数据给客户端,可以完全替代jsp 它不是面向最终用户的,而是一个 ...

最新文章

  1. eventsource 服务器发送事件
  2. Xamarin.IOS中MvvmCross的plugin使用方式
  3. 解决NetStream.appendBytes直播爆音的问题解决
  4. 用jfreechart在JSP页面显示点状分布图+分割线(转载:http://blog.csdn.net/ami121/article/details/2450945)
  5. Github 开源了新型肺炎防疫项目,助力抗击疫情!
  6. Backbone - create model的实现原理
  7. python 倒数_【IT专家】python实现文件倒数N行读取
  8. 如何将分表汇总到总表_总表输入数据,自动拆分到分表,你会吗?
  9. Solr删除managedschema
  10. 安装McAfee 8.7i 提示错误1920怎么办?
  11. 量子计算机编程教程,量子信息与量子计算简明教程 PDF扫描版[12MB]
  12. 百度智能云-文字识别SDK-识别验证码Demo
  13. 设计原则Python
  14. 截止失真放大电路_模电必学基本放大电路
  15. excel查找通配符波浪号,星号
  16. 解决谷歌浏览器被篡改主页问题
  17. python利用公式计算_Python利用openpyxl处理Excel文件(公式实例)
  18. 《数字图像处理》第12讲——图像表示与描述
  19. 塑胶模具设计:产品分型面、插靠破、潜水进胶注意事项
  20. 凯云水利水电工程造价管理系统 技术解析(七) 机械单价(二)

热门文章

  1. Linux下的iscsi(设备的共享服务)
  2. Ubuntu Linux服务器安装Hadoop并配置伪分布式
  3. Python接口自动化之接口依赖
  4. Python 测试驱动开发(五)测试数据库(上)
  5. TokenInsight:反映区块链行业整体表现的TI指数较昨日同期上涨2.62%
  6. Crypto.com APP上线The Graph(GRT)
  7. SAP License:决胜职场先决条件 白领们必须要懂得的人际经
  8. SAP License:雾里看花系列——弃用SAP是小企业无奈的选择
  9. SAP License:SAP权限管理讲财务(二)-看懂财务报表
  10. 外部数据源的使用汇总二