在C#中如果你想经过某个函数之后,返回多个类型不相关的值。可能你需要用到ref或者out来进行实现。
1.ref定义
引用形参
用ref修饰符声明的形参是引用形参(reference parameter),用于输入和输出参数的传递。为引用参数传递的实参必须是变量。引用形参并不创建新的存储位置,其存储位置就是方法调用中作为实参给出的那个变量所表示的存储位置。故当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。
当形参为引用形参时,则方法定义和调用方法都必须显式使用ref关键字。方法调用中的对应实参必须为与形参类型相同的变量,且变量在作为引用形参传递之前,必须先明确赋值。
2.out定义
输出形参
用out修饰符声明的形参是输出形参(output parameter),用于输出参数的传递。与引用形参类似,输出形参并不创建新的存储位置,其存储位置就是方法调用中作为实参给出的那个变量所表示的存储位置。事实上,输出形参主要用于当控制权传递回调用方法时,把输出值传递给相应的变量(当希望方法返回多个值时)。
当形参为输出形参时,则方法定义和调用方法都必须显式使用out关键字。方法调用中的对应实参必须为与形参类型相同的变量,但变量在作为输出形参传递之前,不需要确赋值,但是在将变量作为输出形参传递的调用之后,必须明确赋值。
其实大致意思:
ref需要提前定义并赋值
out需要提前定义并不需要赋值,但必须在调用的函数中为其赋值
ref调用方法:
1 using System; 2 3 namespace test01 4 { 5 class Program 6 { 7 static void RefTest(ref string s) 8 { 9 s = "ref"; 10 } 11 12 static void Main(string[] args) 13 { 14 15 string s="1"; 16 Program.RefTest(ref s); 17 Console.WriteLine(s); 18 19 Console.ReadKey(); 20 } 21 } 22 }
运行结果:
out使用方法:
using System; namespace test01 { class Program { static void RefTest(out string s) { s = "out"; } static void Main(string[] args) { /* *string s="1"; 注释的与下面的定义都可以 */ string s; Program.RefTest(out s); Console.WriteLine(s); Console.ReadKey(); } } }
运行结果:
分类:
C#
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤