C#-out和ref 参数修饰符
2024-10-21 14:40:56
参数修饰符:
- 无参数修饰符:如果一个参数没有任何参数修饰符修饰,那么认为它是值传递,意味着方法内部收到的是实参数据的副本
- out:输出参数由方法内部进行赋值,(引用传递),如果方法内部没有给被out修饰的输出参数赋值,就会出现编译报错。out最大的用途就是只调用一次方法便会产生多个返回值。(C#7.0中实现一次方法返回多个返回值,可以使用元组)
- ref:调用者赋初始值,(引用传递),在方法内部可以对参数进行操作,也可以不对它进行操作,但前提是ref修饰的参数是有初始值的。
out 和 ref 区别:
- out修饰的参数必须在方法内部进行操作,而ref随意
- out传参时,如果参数时局部变量,可以不用对其赋值,因为在其方法内部一定存在赋值操作
- ref修饰的变量,其实参必须有初始值,因为方法中不一定对其有赋值操作。
代码验证如下:
static void Main(string[] args)
{
// 1.out 操作
string str_out;
doOut(out str_out);
Console.WriteLine($"执行doOut后的str值为:{str_out}");
Console.WriteLine("----------------");
// 2.ref操作
string str_ref = "ref修饰的参数一定要提前赋值,否则会报错";
doRef(ref str_ref);
Console.WriteLine("----------------");
// 3.无参数修饰符
string str = "无参数修饰符";
Console.WriteLine($"执行无参数修饰符操作之前:{str}");
doWrite(str);
Console.WriteLine($"执行无参数修饰符操作之后:{str}");
Console.WriteLine("----------------");
} /// <summary>
/// out操作
/// </summary>
/// <param name="s"></param>
public static void doOut(out string s)
{
// out 修饰的参数,在方法内部必须进行赋值相关的操作,否则会报错
s = "out修饰的参数需要在方法内部进行了操作,且原始数据也存在改动";
Console.WriteLine(s);
} /// <summary>
/// ref操作
/// </summary>
/// <param name="s"></param>
public static void doRef(ref string s)
{
// ref 修饰的参数,在方法内部可以不对它进行相关的操作,但参数一定要提前赋值
Console.WriteLine(s);
} /// <summary>
/// 无参数修饰符操作
/// </summary>
/// <param name="s"></param>
public static void doWrite(string s)
{
// 无参数修饰符,传入的实参相当于原始数据的一个副本,本质是值传递,并不会对实参本身的数据产生影响
s = "没有任何参数修饰符";
Console.WriteLine(s);
}
操作截图:
最新文章
- Pyhton的发展历程
- 导出DBF,并且提供下载 [转]
- 【LoadRunner】OSGI性能测试实例
- kali linux系列之启用vpn
- 【MySQL】MySQL同步报错->; Last_IO_Error: Got fatal error 1236 from master when reading data from binary log
- Chrome不支持本地Ajax请求解决?
- tomcat下出现The file is absent or does not have execute&;
- Ubuntu彻底删除mysql
- Postman----模拟服务器返回数据
- 迁移git
- RHEL7下用本地光盘或镜像iso文件做yum源
- 父div的透明度不影响子div透明度
- MySQL高性能优化系列-目录
- 类加载(四):spring-boot-loader 模块
- Git-TortoiseGit的安装和配置
- 冲刺Two之站立会议3
- JQuery插件autocomplete使用说明文档
- Django运算符表达式
- OpenSL ES 查询设备支持的SL Profiles
- display:table; 也可以实现 div 始终和内包的图片大小相同
热门文章
- 炫酷科技感黑客感瀑布流html代码
- vulnhub靶场之FUNBOX: GAOKAO
- Vue3+TypeScript 项目中,配置 ESLint 和 Prettier
- 如何通过Java应用程序添加或删除 PDF 中的附件
- drf-day4——序列化类常用字段和字段参数、序列化类source用法、序列化类定制字段返回内容的两种方式、序列化类的多表关联反序列化保存、反序列化字段校验、ModelSerializer的使用
- 快速入门API Explorer
- 从实现到原理,聊聊Java中的SPI动态扩展
- Spring框架-IoC核心
- spark数据清洗
- Mac 创建Python3虚拟环境