专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

C#之ref 参数

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 0:59:37       共计:3622 浏览

首先,来看一句比较绕嘴的话

变量作为参数传给方法,同时希望在方法执行完成后,对参数所做的修改能够反映到变量上

该怎么处理呢?

你们觉得绕口吗?觉得绕口也没关系,因为看完我下面的讲解,你再理解这句话就会容易很多了。

接着进入文章正题部分

第一步:在控制台上写一个方法,方法的功能就是交换传入的数值,代码如下

static void TestRef(int x, int y)
{ int temp;
    temp = y;
    y = x;
    x = temp;
}

 

第二步:在 Main 函数里声明两个 int 类型的变量 x,y,然后调用 TestRef 方法。为做直观的对比,这里我把交换 x,y 前和交换 x,y后都在控制台上打印出来,代码如下

static void Main(string[] args)
{ int x = 10; int y = 20;
    Console.WriteLine("交换前:x={0},y={1}", x, y);
    TestRef(x, y);
    Console.WriteLine("交换后:x={0},y={1}", x, y);
    Console.ReadKey();
}

启动项目,结果如下

我们明明调用了可以交换传入数值位置的函数 TestRef,为什么却没有交换 x 和 y 的位置呢?

原因分析
首先,函数本身没有问题,问题在于 int 是值类型,它所创建的实例不在托管堆中分配内存,而是直接存储在变量中。虽然我们调用了函数 TestRef,但也不过只是复制了一遍 x,y 的值而已。那我们想在调用完交换函数 TestRef 后,x,y的位置可以交换,该怎么做呢?

这就要引入关键字 ref

什么是 ref
ref (全拼:reference):强制要求参数按引用传值。

使用 ref 关键字 有两个注意事项,如下

一:传入参数之前,必须给参数赋值。
二:调用方法时,必须加 ref 关键字。
验证注意事项一:

现在假如我们不给 x 赋初始值,会有什么问题呢?

验证注意事项二:

我们在函数 TestRef 里参数类型前面加上 ref 关键字


然后直接调用这个函数会有什么问题呢?

以上两个验证便是使用 ref 关键字需要注意的事项。

在调用函数里加上ref关键字后

我们再按F5,看有什么不一样的效果

OK。x,y交换位置成功。

现在再回头看那句绕嘴的话,变量作为参数传给方法,同时希望在方法执行完成后,对参数所做的修改能够反映到变量上,现在应该容易理解了吧!
版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:c# byte[] 操作 | ·下一条:物联网技术零基础学习教程(从入门到精通)

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有