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

36、C#中的⽅法声明参数关键字params,ref,out的意义及⽤法

在C#中,params、ref 和 out 是方法声明中用于修饰参数的关键字,它们各自有不同的用途和语义。以下是它们的详细说明和用法:

1、 params 关键字

意义

params 允许方法接受可变数量的参数,这些参数会被编译为一个数组。适用于参数数量不确定的场景。

用法

  • 必须作为方法的最后一个参数。
  • 类型必须是一维数组(如 int[]、string[] 等)。
  • 调用时可以直接传递逗号分隔的参数列表,或直接传递数组。

示例

void PrintNumbers(params int[] numbers)
{foreach (var num in numbers){Console.WriteLine(num);}
}// 调用方式
PrintNumbers(1, 2, 3);       // 输出:1, 2, 3
PrintNumbers(new int[] {4, 5}); // 输出:4, 5

注意事项

  • 一个方法只能有一个 params 参数。
  • 不能与 ref 或 out 一起使用。

2、ref 关键字

意义

ref 表示参数是按引用传递的,方法内对参数的修改会影响调用方的变量。适用于需要方法内外共享同一存储位置的场景。

用法

调用前必须初始化变量(因为引用不能为 null)。
方法声明和调用时均需使用 ref。

示例

void ModifyValue(ref int x)
{x = x + 10; // 修改会影响调用方的变量
}int num = 5;
ModifyValue(ref num);
Console.WriteLine(num); // 输出:15

注意事项

  • 常用于需要返回多个值的场景(结合 out)。
  • 不能用于 params 参数。

3、out 关键字

意义

out 表示参数是按引用传递的,但调用前无需初始化(方法必须为其赋值)。适用于需要方法返回额外结果的场景。

用法

  • 方法声明和调用时均需使用 out。
  • 方法内部必须对 out 参数赋值(否则编译错误)。

示例

void TryParseNumber(string input, out int result)
{if (int.TryParse(input, out result)){Console.WriteLine("解析成功");}else{result = 0; // 必须赋值}
}int value;
TryParseNumber("123", out value);
Console.WriteLine(value); // 输出:123

C# 7.0+ 的简化语法

从 C# 7.0 开始,可以在调用时直接声明 out 变量:

TryParseNumber("456", out int result);
Console.WriteLine(result); // 输出:456

注意事项

  • 常用于 TryParse、Divide 等需要返回状态或额外结果的场景。
  • 不能用于 params 参数。

通过合理使用这些关键字,可以更灵活地处理方法参数,满足不同场景的需求。

在这里插入图片描述

相关文章:

  • Vue3响应式原理那些事
  • Python10天冲刺《Pydantic 是一个用于数据验证和设置管理的 Python 库》
  • 从入门到登峰-嵌入式Tracker定位算法全景之旅 Part 5 |地图匹配与轻量 SLAM:HMM/Viterbi 与简化图优化
  • 常用对称加密算法的Python实现及详解
  • Javascript学习笔记2——基本引用类型
  • PriorityQueue
  • GESP2024年3月认证C++八级( 第二部分判断题(1-5))
  • kdump详解
  • 使用 NGINX 实现 HTTP Basic 认证ngx_http_auth_basic_module 模块
  • python函数复习(形参实参,收集参数,关键字参数)
  • 《OmniMeetProTrack 全维会议链智能追录系统 软件说明书》
  • 【NLP】33. Pinecone + OpenAI :构建自定义语义搜索系统
  • E-R图作业
  • 《人件》第四章 高效团队养成
  • webpack 的工作流程
  • Qt天气预报系统绘制温度曲线
  • 专业课复习笔记 4
  • 基于Python+MongoDB猫眼电影 Top100 数据爬取与存储
  • 地埋式燃气泄漏检测装置与地下井室可燃气体检测装置有什么区别
  • LLM(17):计算所有输入 token 的注意力权重
  • 沪幼升小网上报名明起开始,是否参与民办摇号怎么定?
  • 射箭世界杯赛上海站即将开幕,多方联动讲好上海故事
  • 我给狗狗上课,月赚四五万
  • 医生李某某饮酒上班?重庆长寿区人民医院:正在调查,将严肃处理
  • 申活观察|精致精准精细,城市“双面镜”照见怎样的海派活力
  • 龚正盛秋平王晓真共同启动2025国际消费季暨第六届上海“五五购物节”