请说明 C# 中 in、ref、out 三种参数修饰符的用法,并分别阐述它们各自的作用。
考察说明
考查对 C# 参数传递机制中三种修饰符语义差异的理解。
回答思路
- 【回答框架 1】in 修饰符用于按引用传递参数,但保证方法内不修改该参数,适合传递大型只读结构体以避免复制开销。
- 【回答框架 2】ref 修饰符要求参数在传入前必须初始化,方法内可读取和修改该参数,修改会反映到调用方变量。
- 【回答框架 3】out 修饰符不要求参数在传入前初始化,但方法内必须在返回前为其赋值,常用于返回多个值。
- 【回答框架 4】三者都传递引用,但 in 侧重只读,ref 侧重可读写,out 侧重输出;调用时 ref 和 out 需显式标注,in 可省略。
- 【回答框架 5】选择依据:需要修改且需保留原值用 ref,需要输出新值用 out,只需高效传递只读数据用 in。
- 【关键点 1】in 参数在方法内不可赋值,避免复制开销。
- 【关键点 2】ref 参数必须在调用前初始化,方法内可修改并影响调用方。
- 【关键点 3】out 参数必须在方法内赋值,调用前无需初始化。
- 【关键点 4】三者均按引用传递,但语义不同,需根据场景选择。
- 【易错点 1】混淆 ref 和 out 的初始化要求,导致编译错误。
- 【易错点 2】对 in 参数尝试赋值,违反只读约束。
- 【易错点 3】误以为 in 参数总是按值传递,实际是按引用传递但只读。