首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
软件与程序人生
›
后端开发
›
.Net
›
C#中的ref关键字
返回列表
发新帖
C#中的ref关键字
[复制链接]
发表于 2024-1-17 11:46:13
来自手机
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
值参数(Value Parameters)
1、传递的是参数的值(数据的副本)而不是原始数据本身。
2、函数内部对值参数的修改不会影响到原始数据。
3、通常用于传递基本数据类型(如整数、浮点数、布尔值)或不可变对象(如字符串、元组)。
4、值参数的传递是一种传值调用(Call by Value)。
示例
代码
internal class Program<br> {<br> static void ShowDouble(int val)<br> {<br> val *= 2;<br> Console.WriteLine($"ShowDouble函数中val的值为:{val}");<br> }<br> static void Main(string[] args)<br> {<br> int val = 6;<br> Console.WriteLine($"Main函数中执行ShowDouble函数前val的值为:{val}");<br> ShowDouble(val);<br> Console.WriteLine($"Main函数中执行ShowDouble函数后val的值为:{val}");<br> }<br> }
复制
代码
运行结果,如下图所示:
把val作为一个参数,调用ShowDouble()并不影响Main()中val的值
那么如何改变val的值呢?
可以使用一个含返回值的函数
代码
如下所示:
internal class Program<br> {<br> static int ShowDouble(int val)<br> {<br> val *= 2;<br> Console.WriteLine($"ShowDouble函数中val的值为:{val}");<br> return val;<br> }<br> static void Main(string[] args)<br> {<br> int val = 6;<br> Console.WriteLine($"Main函数中执行ShowDouble函数前val的值为:{val}");<br> val = ShowDouble(val);<br> Console.WriteLine($"Main函数中执行ShowDouble函数后val的值为:{val}");<br> }<br> }
复制代码
运行结果,如下所示:
成功改变了参数的值,但是这种方式并不直观,且不能改变用作参数的多个变量的值(因为函数只有一个返回值),这时就可以通过引用来传递参数。
引用参数(Reference Parameters)
1、传递的是参数的引用(内存地址),直接操作原始数据。
2、函数内部对引用参数的修改会影响到原始数据。
3、通常用于传递可变对象(如列表、字典)或对象实例,以便在函数内部进行修改并在函数外部保持修改后的状态。
4、引用参数的传递是一种传址调用(Call by Reference)。
C#中使用ref关键字指定参数,代码如下所示:
internal class Program<br> {<br> static void ShowDouble(ref int val)<br> {<br> val *= 2;<br> Console.WriteLine($"ShowDouble函数中val的值为:{val}"); <br> }<br> static void Main(string[] args)<br> {<br> int val = 6;<br> Console.WriteLine($"Main函数中执行ShowDouble函数前val的值为:{val}");<br> ShowDouble(ref val);<br> Console.WriteLine($"Main函数中执行ShowDouble函数后val的值为:{val}");<br> }<br> }
复制代码
运行结果,如下图所示:
要注意,不仅在函数的声明中要使用ref指定参数,如代码 static void ShowDouble(ref int val)所示,在函数的调用中,也要再次指定它,如代码 ShowDouble(ref val)所示。
使用ref的限制
1、函数可能会改变引用参数的值,所以必须在函数调用中要使用“非常量”变量
const int val = 6;
复制代码
这种写法,编译器会报错,如下图所示:
2、必须使用初始化过的变量。C#不允许假定ref参数在使用它的函数中初始化。
int val;<br> ShowDouble(ref val);
复制代码
这种写法,编译器也会报错,如下图所示:
参考书籍
《C#入门经典(第7版)》——Benjamin Perkins、Jacob Vibe Hammer、Jon D. Reid
回复
使用道具
举报
返回列表
浏览过的版块
分布式数据库
前端开发
Java
数据仓库与分析
人工智能
DevOps与敏捷开发
Mysql
SQL-Server
开源技术
PLM
诗林
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表