当前位置: 首页 > news >正文

ref、out 参数

## 一、共同特征
第一,ref与out都是地址传递,不再拷贝数据副本,方法内部修改参数,外部原始变量的值同步跟着变化。
第二,方法定义的形参、调用时的实参,两边必须同时写同一个关键字,要么全ref,要么全out,不能一个ref一个out混用。

## 二、ref参数知识点+示例代码
1. 语法规则:调用方法前,实参变量**必须提前初始化赋值**,未赋值变量不能作为ref实参传入。
2. 方法内部:ref参数既能读取原本传入的数值,也可以修改数值,只读取不修改代码也合法。
3. 适用场景:依托原有数据做修改,修改结果带回外层变量。

```csharp
using System;
class TestParam
{
//形参加ref
static void ChangeNum(ref int num)
{
num += 20;
}
static void Main()
{
int a = 10;//调用前必须赋值
ChangeNum(ref a);//实参同步写ref
Console.WriteLine(a);//输出30
Console.ReadKey();
}
}
```

## 三、out参数知识点+示例代码
1. 语法规则:调用方法前,实参可以不提前赋值,只声明变量即可。
2. 强制要求:在方法结束之前,代码必须给所有out形参完成赋值,缺少赋值直接编译报错,不能只读取不赋值。
3. 适用场景:一个方法需要返回多个运算结果,弥补return只能返回一个数据的短板。

```csharp
using System;
class TestParam
{
static void GetCalc(int x, int y, out int sum, out int sub)
{
sum = x + y;//out必须在方法内赋值
sub = x - y;
}
static void Main()
{
int s, d;//不用提前赋值
GetCalc(20, 5, out s, out d);
Console.WriteLine($"和:{s},差:{d}");
Console.ReadKey();
}
}
```

## 四、背诵口诀
ref带初始值进门,可读可改;out空手进门,方法内部必须赋值。

## 五、高频易错考点
1. out参数禁止只读取不赋值,编译报错;ref参数只读取不修改,语法正常。
2. ref和out修饰符不能交叉使用,形参ref、调用传out是错误写法。
3. 普通值传递复制新副本,方法修改副本不影响外面变量;ref/out共用同一块内存地址,内外数据联动变化。

## 补充:错误示例(加深理解)
### ref错误:变量未初始化
```csharp
int num;
ChangeNum(ref num);//报错,ref实参必须预先赋值
```
### out错误:方法内未给out变量赋值
```csharp
static void TestOut(out int n)
{
//没有给n赋值,编译报错
}
```

http://www.rkmt.cn/news/1475975.html

相关文章:

  • 定义下一代电池研发范式:PLM融合计算、AI与高通量实验,加速创新循环
  • 15分钟快速部署:wvp-GB28181-pro国标视频监控平台终极实战指南
  • 现在算法已经做到1秒识别出收藏按钮-----超出预期
  • VidDown 视频解析下载:免安装、无水印、免费使用
  • 终极游戏内容创作指南:如何使用Harepacker-resurrected打造你的MapleStory游戏世界
  • RAG召回率从60%到95%:2026年实战优化指南
  • 目前已经做到精准识别抖音主要控件---------无视干扰
  • 标准化智能化双轮驱动:智圣新创第二课堂成绩单数字化建设可复制实践
  • CSDN AI看板关键词排名查询失效?3步绕过限制获取真实百度/搜狗/360三端排名数据,限期内可复现
  • 从‘驻波’到‘行波’:一个故事讲明白天线匹配为啥要搞到50欧姆
  • 华为AI数字资深顾问颜少林|航天工业AI大模型—赋能航空工业研发全流程数字化工作坊
  • LSPatch入门指南:无需Root权限的安卓应用改造神器
  • 地铁上听到两位字节Seed大佬说“用AI后人反而更累”,我每天和AI聊天明明挺轻松啊?调研后才发现:他们说得对……
  • 智能门禁系统的设计(设计源文件+万字报告+讲解)(支持资料、图片参考_降重降ai)
  • 2026 高考生凭准考证选购苹果手机|完整优惠攻略(线上 + 线下 + 国补 + 618 叠加) - 资讯速览
  • Chromium 146 编译指南 macOS篇:配置 depot_tools(三)
  • 别再只盯着权重剪枝了!聊聊那些更实用的CNN通道/过滤器剪枝实战方法
  • Xilinx Virtex-5 FPGA DDR2 SDRAM接口调试全流程与避坑指南
  • 新手入门:通过快马生成的代码轻松理解timed_out编程概念
  • 5分钟找回十年青春:GetQzonehistory一键备份QQ空间完整记忆
  • 在线查询IP归属地攻略:三步锁定精确地理位置,新手也能用(2026版)
  • 如何永久免费使用IDM:一键激活脚本完整指南
  • 深度修复:Flow Launcher文件搜索失效的3步诊断与解决方案
  • 南京微短剧产业迎来“高光时刻”:“百部真人短剧集群”盛大开机 - 资讯速览
  • 2026.06.06 6666666
  • 实测5种Prompt模板对比100次查询性能
  • JS详解:Boolean()与!!双感叹号的区别、用法、底层原理(前端必看)
  • 2026年免费在线抠图工具推荐:一看就会的网页版详细教程
  • OmenSuperHub终极指南:如何为惠普OMEN游戏本实现专业级性能控制
  • 2026年想去成都电竞网咖,哪家性价比高能让我玩得值