ref out的用法
现在我们要实现交换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的用法相关推荐
- react的ref三种用法
第一种 字符串的ref ref="myRef" 里面的绑定是字符串的绑定用法,这种ref的形式写多了影响效率问题,官方文档已经不推荐此写法 //创建类式组件class Demo e ...
- vue组件通信。prop,ref,emit的用法与区别
前言 相信对于很多vue初学者来说,看到组件通信这块的时候,跟我一样懵逼,完全摸不清啥是啥,搞到最后,连父子组件都区分不清了. 下面这篇文章就是我对vue父子组件通信的研究,写的比较啰嗦,但是,对于一 ...
- Vue2中ref属性的用法
最近写东西遇到了莫名其妙的问题,用ref属性原以为它会获得一个数组http://www.jianshu.com/p/05c863ec2a23 // html <ul><li ref= ...
- 【ExcelPlanet】SUMPRODUCT函数用法:单条件、多条件、模糊条件求和与计数
欢迎来到ExcelPlanet,今天我们来聊聊一个"真香"的求和函数:SUMPRODUCT.因为涉及到数值概念,导致一开始可能会有入门障碍.但其实理解之后,在统计报表等方面的功能非 ...
- vue3 效率的提升、composition-api 和 ref 详解
vue3 效率的提升.composition-api 和 ref 详解 文章目录 vue3 效率的提升.composition-api 和 ref 详解 vue3 效率的提升 优化diff算法 hoi ...
- Spring的Bean属性依赖注入
属性依赖注入的三种方式 什么是Bean属性的注入?就是对一个对象的属性赋值.有三种方式: 第一种:构造器参数注入 第二种:setter方法属性注入(setter方法的规范需要符合JavaBean规范) ...
- 秋招斩获所有互联网大厂面经之前端
1 flash和js通过什么类如何交互? ExternalInterface ----------------------------------- 2 call和apply: -apply传入的是一 ...
- 前端面经 300条,背完这些就够了!
前沿 确实有些标题党哈,但是确实是本人秋招之间总结的经验,前端岗位,会很多也不行,有时候秋招就是面试官看你的知识广度和深度,特别是前端的岗位,设计的方方面面太多了,只有提前准备好,理解好,然后背下来, ...
- FreeMarker Thymeleaf - 前端模板引擎
FreeMarker 概述 FreeMarker是一种模板引擎(基于模板和要改变的数据),主要用于MVC中的view层,生成html展示数据给客户端,可以完全替代jsp 它不是面向最终用户的,而是一个 ...
最新文章
- eventsource 服务器发送事件
- Xamarin.IOS中MvvmCross的plugin使用方式
- 解决NetStream.appendBytes直播爆音的问题解决
- 用jfreechart在JSP页面显示点状分布图+分割线(转载:http://blog.csdn.net/ami121/article/details/2450945)
- Github 开源了新型肺炎防疫项目,助力抗击疫情!
- Backbone - create model的实现原理
- python 倒数_【IT专家】python实现文件倒数N行读取
- 如何将分表汇总到总表_总表输入数据,自动拆分到分表,你会吗?
- Solr删除managedschema
- 安装McAfee 8.7i 提示错误1920怎么办?
- 量子计算机编程教程,量子信息与量子计算简明教程 PDF扫描版[12MB]
- 百度智能云-文字识别SDK-识别验证码Demo
- 设计原则Python
- 截止失真放大电路_模电必学基本放大电路
- excel查找通配符波浪号,星号
- 解决谷歌浏览器被篡改主页问题
- python利用公式计算_Python利用openpyxl处理Excel文件(公式实例)
- 《数字图像处理》第12讲——图像表示与描述
- 塑胶模具设计:产品分型面、插靠破、潜水进胶注意事项
- 凯云水利水电工程造价管理系统 技术解析(七) 机械单价(二)
热门文章
- Linux下的iscsi(设备的共享服务)
- Ubuntu Linux服务器安装Hadoop并配置伪分布式
- Python接口自动化之接口依赖
- Python 测试驱动开发(五)测试数据库(上)
- TokenInsight:反映区块链行业整体表现的TI指数较昨日同期上涨2.62%
- Crypto.com APP上线The Graph(GRT)
- SAP License:决胜职场先决条件 白领们必须要懂得的人际经
- SAP License:雾里看花系列——弃用SAP是小企业无奈的选择
- SAP License:SAP权限管理讲财务(二)-看懂财务报表
- 外部数据源的使用汇总二