C# 7.0之ref locals and returns(局部变量和引用返回)
没看过原文的请移步: [干货来袭]C#7.0新特性(VS2017可用)
废话不多说,直接进入正题。首先我们知道ref关键字是将值传递变为引用传递,那么我们先来看看ref locals(ref局部变量)
列子代码如下:
static void Main(string[] args) { int x = 3; ref int x1 = ref x; //注意这里,我们通过ref关键字 把x赋给了x1 x1 = 2; Console.WriteLine($"改变后的变量 {nameof(x)} 值为: {x}"); Console.ReadLine(); }
这段代码最终输出 "2"
大家注意注释的部分,我们通过ref关键字把x赋给了x1,如果是值类型的传递,那么对x将毫无影响,还是输出3.
好处不言而喻,在某些特定的场合,我们可以直接用ref来引用传递,减少了值传递所需要开辟的空间.
接下来我们看看ref returns (ref引用返回)
这个功能其实是非常有用的,我们可以把值类型当作引用类型来进行return。
老规矩,我们举个栗子,代码如下:
很简单的逻辑..获取指定数组的指定下标的值
static ref int GetByIndex(int[] arr, int ix) => ref arr[ix]; //获取指定数组的指定下标
我们编写测试代码如下:
int[] arr = { 1, 2, 3, 4, 5 }; ref int x = ref GetByIndex(arr, 2); //调用刚才的方法 x = 99; Console.WriteLine($"数组arr[2]的值为: {arr[2]}"); Console.ReadLine();
我们通过ref返回引用类型,在重新赋值,arr数组中的值,相应也改变了。
总结一下:ref关键字很早就存在了,但是他只能用于参数,这次C#7.0让他不仅仅只能作为参数传递,,还能作为本地变量和返回值了
好了,就这么多。
谢谢大家的捧场。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
C#7.0中新特性汇总
以下将是 C# 7.0 中所有计划的语言特性的描述.随着 Visual Studio "15" Preview 4 版本的发布,这些特性中的大部分将活跃起来.现在是时候来展示这些特性,你也告诉借此告诉我们你的想法! C#7.0 增加了许多新功能,并专注于数据消费,简化代码和性能的改善.或许最大的特性就是元祖和模式匹配,元祖可以很容易地拥有多个返回结果,而模型匹配可以根据数据的"形"的不同来简化代码.我们希望,将它们结合起来,从而使你的代码更加简洁高效,也可以使你更加
-
C# 7.0 新特性1之基于Tuple的“多”返回值方法
原文链接:http://www.cnblogs.com/ylvict/p/5573094.html 回顾 首先,提出一个问题,C#中,如何使一个方法可返回"多个"返回值? 我们先来回顾一下C#6.0 及更早版本的做法. 在C#中,通常我们有以下4种方式使一个方法返回多条数据. •使用 KeyValue 组合 • static void Main(string[] args) { int int1 = 15; int int2 = 25; var result = Add_Mul
-
C#:(变量)字段和局部变量的作用域冲突
C#把声明为类型级的变量看作字段,而把在方法中声明的变量看作局部变量. 复制代码 代码如下: using System; namespace ConsoleApplication10{class Program{static int j = 20; public static void Main(string[] args){int j = 30;Console.WriteLine("In the Main()" + j);Console.WriteLine(Program.j);Co
-
C#特性 匿名类型与隐式类型局部变量使用介绍
在本篇中我要介绍两个概念,我觉得这两个东西必须一起来介绍,这样才能连贯. C# 2.0里我们已经匿名方法了,现在类型也玩起匿名来了,怪不得大家"举报"的时候都喜欢匿名,为啥?因为匿名被举报人就找不着报复对象了呗,是的,匿名就是把名字隐藏起来,没有名字谁还能找得到你啊. 匿名类型 在C#里有这样一些类型,它是作为临时储存数据的,生命周期只在这个方法内,方法结束了,这个类型的生命周期也没有了.那么这里我们就可以使用一个匿名类型. 复制代码 代码如下: var KeyPair = new {
-
C# web api返回类型设置为json的两种方法
web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Application_Start()方法中添加一句: 复制代码 代码如下: GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 修改后: 复制代码 代码如下: protected void
-
C#一个方法返回多个值示例
复制代码 代码如下: static void Main(string[] args) { //声明 int value; string strOutValue; //调用函数 //函数的参数有两个返回的值 ReturnMulValue(out strOutValue,out value); Console.WriteLine("Call ReturnMulValue(out
-
C# 7.0之ref locals and returns(局部变量和引用返回)
没看过原文的请移步: [干货来袭]C#7.0新特性(VS2017可用) 废话不多说,直接进入正题.首先我们知道ref关键字是将值传递变为引用传递,那么我们先来看看ref locals(ref局部变量) 列子代码如下: static void Main(string[] args) { int x = 3; ref int x1 = ref x; //注意这里,我们通过ref关键字 把x赋给了x1 x1 = 2; Console.WriteLine($"改变后的变量 {nameof(x)} 值为:
-
Vue3.0中Ref与Reactive的区别示例详析
目录 Ref与Reactive Ref Reactive Ref与Reactive的区别 shallowRef 与shallowReactive toRaw ---只修改数据不渲染页面 markRaw --- 不追踪数据 toRef --- 跟数据源关联 不修改UI toRefs ---设置多个toRef属性值 customRef ---自定义一个ref ref 捆绑页面的标签 总结 Ref与Reactive Ref Ref 用来创建基础类型的响应式数据,模板默认调用value显示数据.方法中修
-
vue 3.0 使用ref获取dom元素的示例
前言 附上vue3.0文档:Vue3中文文档 - vuejs Vue 2.x获取DOM <div ref="myRef"></div> this.$refs.myRef Vue 3.0获取单个DOM <template> <div ref="myRef">获取单个DOM元素</div> </template> <script> import { ref, onMounted } fr
-
干货来袭! C# 7.0 新特性(VS2017可用)
前言 微软昨天发布了新的VS 2017 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下其实2016年12月就已经公布了的C#7.0的新特性吧,虽然很早就出来了,但咱这IDE不支持啊.. 不过在昨天的VS2017中已经完美可以支持使用了. E文好的,移步官方介绍地址:https://docs.microsoft.com/zh-cn/dotnet/articles/csharp/csharp-7 先列一下相关的语法: 1.ou
-
.Net Core中使用ref和Span<T>提高程序性能的实现代码
一.前言 其实说到ref,很多同学对它已经有所了解,ref是C# 7.0的一个语言特性,它为开发人员提供了返回本地变量引用和值引用的机制. Span也是建立在ref语法基础上的一个复杂的数据类型,在文章的后半部分,我会有一个例子说明如何使用它. 二.ref关键字 不论是ref还是out关键,都是一种比较难以理解和操作的语言特性,如C语言中操作指针一样,这样的高级语法总是什么带来一些副作用,但是我不认为这有什么,而且不是每一个C#开发者都要对这些内部运行的机制有着深刻的理解,我觉得不论什么复杂的东
-
ASP.NET Ref和Out关键字区别分析
值类型 引用类型 以C#为例:其值类型为sbyte,byte,char,short,ushort,int,uint,long和ulong,float和double,当然还有decimal和bool.而引用类型则是string和object. 我想说的 我想说的就是--Ref和Out把我弄糊涂的原因是,当时没有认真的去分析它对不同类型所做出的不同的动作. 对于值类型. 使用了Ref和Out的效果就几乎和C中使用了指针变量一样.它能够让你直接对原数进行操作,而不是对那个原数的Copy进行操作.举个小
-
详解C#中三个关键字params,Ref,out
关于这三个关键字之前可以研究一下原本的一些操作 using System; using System.Collections.Generic; using System.Text; namespace ParamsRefOut { class Program { static void ChangeValue(int i) { i=5; Console.WriteLine("The ChangeValue method changed the value "+i.ToString())
-
C#中按引用传递与按值传递的区别,以及ref与out关键字的用法详解
复制代码 代码如下: /给三个整数从小到大排序并求和及其平均值//其中,三个待求整数及其排序的结果由引用参数传递:其和由输出参数传递:平均值由返回值返回.//在Main()方法中实现三个待求整数的输入及结果的输出//目的:定义方法:调用方法::理解形参和实参的引用传递关系:熟悉引用参数和输出参数的使用.using System;class Class1 { //x,y,z是形参,按值传递 static void Sort(int x, int y, int z) { in
随机推荐
- js从数组中删除指定值(不是指定位置)的元素实现代码
- 如何使用ajax读取Json中的数据
- Java数据结构之链表(动力节点之Java学院整理)
- Javascript数组与字典用法分析
- C语言中获取文件状态的相关函数小结
- SQL字符串以及数字常用操作汇总
- ajax.js里面有内容显示效果,根据ID
- Listloading.js移动端上拉下拉刷新组件
- 基于C中含有if的宏定义详解
- Java中的BufferedInputStream与BufferedOutputStream使用示例
- sdl显示一张bmp图片示例
- C++软件添加dump调试打印日志(推荐)
- PHP面向对象程序设计之对象生成方法详解
- python基于socket实现网络广播的方法
- 如何实现网络分段
- php识别翻转iphone拍摄的颠倒图片
- Laravel5框架自定义错误页面配置操作示例
- 10个最受欢迎的 JavaScript框架(推荐)
- 使用MySQL的geometry类型处理经纬度距离问题的方法
- 在vue中获取token,并将token写进header的方法