ref和out解析
1.用途:
在C#中当一个方法需要返回多个值的时候,就需要用到ref和out。
2.Ref使用
/// <summary>
/// ref正确例子
/// </summary>
/// <returns></returns>
public IActionResult Sample()
{
int x = 1;//初始化
int y = 1;//初始化
RefWay(ref x, ref y);
return Json(x, y);
}
/// <summary>
/// 方法
/// </summary>
/// <param name="x">参数X</param>
/// <param name="y">参数y</param>
public void RefWay(ref int x, ref int y)
{
x = 100;
y = 100;
}
输出:x=100,y=100
/// <summary>
/// ref错误例子
/// </summary>
/// <returns></returns>
public IActionResult Sample()
{
int x;//未初始化
int y;//未初始化
RefWay(ref x, ref y);
return Json(x, y);
}
/// <summary>
/// 方法
/// </summary>
/// <param name="x">参数X</param>
/// <param name="y">参数y</param>
public void RefWay(ref int x, ref int y)
{
x = 100;
y = 100;
}
错误信息:(1)使用了局部变量的“x”(2)使用了局部变量的“y”
注意:ref指定的参数在函数调用时候必须初始化,不能为空的引用。
2.Out使用
/// <summary>
/// out正确例子
/// </summary>
/// <returns></returns>
public IActionResult Sample()
{
int x;//未初始化
int y;//未初始化
RefWay(out x, out y);
return Json(x, y);
}
/// <summary>
/// 方法
/// </summary>
/// <param name="x">参数X</param>
/// <param name="y">参数y</param>
public void RefWay(out int x, out int y)
{
x = 100;
y = 100;
}
输出:x=100,y=100
/// <summary>
/// out错误例子
/// </summary>
/// <returns></returns>
public IActionResult Sample()
{
int x;//未初始化
int y = 100;//初始化
RefWay(out x, out y);
return Json(x, y);
}
/// <summary>
/// 方法
/// </summary>
/// <param name="x">参数X</param>
/// <param name="y">参数y</param>
public void RefWay(out int x, out int y)
{
x = y;
y = 100;
}
错误信息: 使用了局部变量的“y”
注意:out指定的参数在函数调用时候可以不初始化;参数在进入函数时会清空自己,必须在函数内部赋初值。而ref指定的参数不需要。
总结:
1.口诀:ref有进有出,out只出不进。
2.out:举个例子--我们去商店(函数)买东西,我们可以带钱(参数初始化)也可以不带,不管我们带没带钱,我们今天的目的就是去拿东西,
然后欠钱(参数清空),因为和老板是好朋友。因此我们走的时候必须要带东西走(必须在函数内部赋初值)。
2.ref:举个例子--我们去商店(函数)买东西,我们必须要带钱(参数初始化),因为我们和老板不认识, 到商店之后,我们可以买东西也可以不买东西,假如我们买了东西,那么我们就可以带着物品(返回值)离开商店。假如我们没有买东西,那么我们就带着钱(返回值)离开商店。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?