十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

C# ref、out、in 参数对比

C# ref、out、in 参数对比 三者均为引用传递修饰符对值类型 (struct) 作用明显引用类型本身传引用加不加关键字差异很小。表格关键字调用前实参是否需要赋值方法内可读方法内可写核心用途ref✅ 必须预先赋值✅ 支持读取✅ 支持修改双向传递输入 输出out❌ 可以不赋值❌ 读取前必须先赋值✅方法结束前必须赋值多返回值只向外输出结果in✅ 必须预先赋值✅ 支持读取❌ 禁止修改大结构体性能优化只读引用1. ref双向传入传出外部实参调用前一定要初始化方法既可以读取原始值也可以修改修改会作用到外部变量。运行static void TestRef(ref int num) { num num 10; //可读可修改 } //调用 int a 5; TestRef(ref a); //执行后 a 152. out仅输出多返回值调用前变量可以不赋值方法内部必须给 out 参数赋值才能返回不允许直接读取传入的原始数值。你写的圆周长面积计算就是 out 的典型场景。运行static void TestOut(out int num) { num 100; //强制要求赋值不能直接读取num原值 } //调用 int a; TestOut(out a); //执行后 a 1003. in只读引用C#7.2 及以上外部实参必须初始化方法只能读取禁止修改。专门用于传递大型结构体避免拷贝提升程序性能。运行static int TestIn(in Point3D p) { return (int)p.X; // p.X 99; //编译报错禁止修改 } //调用 Point3D pt new Point3D{X1,Y2,Z3}; TestIn(in pt);记忆口诀ref有进有出外赋值内可读可改out只出不进外可不赋值内必须赋值in只进不出外要赋值内只读不能改调用语法要点调用方法时需要带上对应关键字运行TestRef(ref a); TestOut(out a); TestIn(in pt);C#7 支持 out 内联声明TestOut(out int a);调用处直接定义变量。使用场景选择需要多个返回结果→out把外部变量传入方法修改后带回外部 →ref传递大 struct 结构体不想拷贝禁止修改数据 →in
返回列表