C# out和ref参数修饰符的区别 - 按引用传递参数的两种方式

煙雲
发布: 2025-12-04 17:26:02
原创
126人浏览过
ref参数需调用前初始化,用于双向数据传递;out参数无需初始化但方法内必须赋值,专为输出设计,如TryParse模式。

c# out和ref参数修饰符的区别 - 按引用传递参数的两种方式

outref 都是 C# 中用于按引用传递参数的关键字,它们可以让方法修改传入的变量值,并将修改结果带回调用处。虽然功能相似,但两者在使用场景和规则上有重要区别

ref 参数:传入前必须初始化

使用 ref 修饰的参数要求变量在传递给方法之前必须已经赋值。方法可以读取和修改这个变量的值。

• 必须在调用方法前对变量进行初始化。• 方法内部可以直接读取 ref 参数的当前值。• 常用于需要“双向”传递数据的场景——既输入又输出。

示例:

int number = 10;
ModifyValue(ref number);
Console.WriteLine(number); // 输出 20
<p>void ModifyValue(ref int x)
{
Console.WriteLine(x); // 可以读取原始值
x = x * 2;            // 修改原变量
}
登录后复制

out 参数:专为输出设计

out 参数的设计目的是让方法返回多个值。与 ref 不同,调用方法时无需初始化变量,但方法内部必须在返回前为其赋值。

帮小忙
帮小忙

腾讯QQ浏览器在线工具箱平台

帮小忙 102
查看详情 帮小忙
• 调用前不需要初始化变量。• 方法体内必须对 out 参数至少赋值一次,否则编译失败。• 更适合“纯输出”场景,比如 TryParse 模式。

示例:

int result;
bool success = int.TryParse("123", out result);
<p>if (success)
Console.WriteLine(result); // 输出 123</p><p>// 注意:即使没初始化 result,也能通过 out 正常传参
登录后复制

关键区别总结

• 初始化要求:ref 要求调用前初始化;out 允许未初始化,但方法内必须赋值。• 使用意图:ref 强调“引用已有数据并修改”;out 强调“从方法获取一个新值”。• 编译检查:编译器会强制 out 参数在方法返回前被赋值,而 ref 不做此检查。• 调用语法:调用时都需加上 ref 或 out 关键字(C# 7.0 后可在声明时省略局部变量类型推断)。

基本上就这些。选择用哪个取决于你是否需要传入初始值以及语义清晰性——想表达“我提供输入并接受修改”用 ref,想表达“我只想拿结果”就用 out。

以上就是C# out和ref参数修饰符的区别 - 按引用传递参数的两种方式的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号