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让他不仅仅只能作为参数传递,还能作为本地变量和返回值了

好了,就这么多.

谢谢大家的捧场

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏老九学堂

原来C语言和其他高级语言的最大的区别是这个...

我们需要知道——变量,其实是内存地址的一个抽像名字罢了。在静态编译的程序中,所有的变量名都会在编译时被转成内存地址。机器是不知道我们取的名字的,只知道地址。

933
来自专栏天天

微信小程序 页面与自定义组件数据通信

说明:页面通过my-property讲example字符串传递给自定义组件,同样也可以使用数据绑定的方法

1076
来自专栏别先生

Javascript提升阶段学习

JavaScript 1:javascript简介   JavaScript是一种脚本语言,能实现网页内容的交互显示,当用户在客户端显示该网页时,浏览器就会执...

1808
来自专栏hbbliyong

C#,一些非常简单但应该知道的知识点

1.本地变量 一看这个标题你可能会一愣,这是个什么东东。看个小例子: static void main() {    int a=10;    MyClass ...

4159
来自专栏小古哥的博客园

JavaScript闭包的深入理解

闭包算是javascript中一个比较难理解的概念,想要深入理解闭包的原理,首先需要搞清楚其他几个概念: 一、栈内存和堆内存 学过C/C++的同学可能知道,计算...

3517
来自专栏cs

归并排序

归并排序,采用分治法。首先采用递归,把数组分成一小段有序,然后再把有序的数组一一合并。 首先看看,把有序的二个数组,合成一个的算法。 package day20...

2294
来自专栏日常学python

爬虫必学知识之正则表达式上篇

这是日常学python的第12篇文章 在向网页进行了提交请求之类的之后,我们可以得到了网页的返回内容,里面自然而然会有我们想要的数据,但是html元素文本这么多...

3216
来自专栏天天

微信小程序 页面与自定义组件数据通信

说明:页面通过my-property讲example字符串传递给自定义组件,同样也可以使用数据绑定的方法

1745
来自专栏java工会

Java基础第一阶段知识点,招实习的面试官都在问这些

a) 答:Java源文件被编译成字节码的形式,无论在什么系统环境下,只要有java虚

641
来自专栏xcywt

《Linux命令行与shell脚本编程大全》第十七章 创建函数

可以将shell脚本代码放进函数中封装起来,这样就能在脚本中的任何地方多次使用它了。 17.1 基本的脚本函数 函数:是一个脚本代码块,可以为其命名并在代码中任...

17810

扫码关注云+社区