随笔 - 80  文章 - 0  评论 - 32  阅读 - 87985

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:举个例子--我们去商店(函数)买东西,我们必须要带钱(参数初始化),因为我们和老板不认识, 到商店之后,我们可以买东西也可以不买东西,假如我们买了东西,那么我们就可以带着物品(返回值)离开商店假如我们没有买东西,那么我们就带着钱(返回值)离开商店

posted on   小乐丶  阅读(423)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示