C# 中的三个高级参数 ref

时间:2021-12-18 04:11:36

今天在浏览博文时,看到这篇文章:C#中的ref 传进出的到底是什么 ? 在传东西时使用ref的疑问

引用类型就传的就是地点,值类型传的就是值,可是还仍有那么多人迷惑,网上虽然传布着很多ref 的相关文章,似乎都没为大伙解下惑。

比来有人在看我 CYQ.Data 框架 的时候说起,既然class是引用地点,自己传的就是地点,你代码中还要写ref通报来干什么;

贴出来做示例:

  /// <summary>
    /// by 路过秋天 
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
           Person p = new Person("张三");
           Change(p);
           Write(p.Name); //输出的是张三 并不是李四

           Change(p, "李四");  
           Write(p.Name);//输出的是李四

          Change(ref p);
          Write(p.Name); //输出的是王五 
          Console.ReadKey();
    }   
        static void Change(Person p)
        {
           p = new Person("李四");
        }
        static void Change(Person p, string name)
        {
            p.Name = name;
        }
        static void Change(ref Person p)
        {
            p = new Person("王五");
        }
    }

这里趁便截图让大伙看看是怎么调试而解惑的。

F5运行:

1:我们运行到第一行代码,断点:

C# 中的三个高级参数 ref

重点说明:p地点:0x044becf8

2:我们运行到Change(p)内部中

C# 中的三个高级参数 ref

重点说明:p地点产生变革:0x044becd0

简单说:你这内部的p和外面的p都不一样,所以不会影响外面p的地点。
备注p值的地点变革了,是因为断点在第一行代码时还没执行实例化,所以其值是一样的。

于是第一行功效输出:张三

3:接下来运行到Change(p,"李四") 函数内部

C# 中的三个高级参数 ref

重点说明:这里内部的p的地点还是产生了变革,酿成了0x044becd0
然而其指向的值是一样的,所以你把值改了,所以“李四”就出来了。
备注:内部的p和外面的p虽然不一样,但是指向的值是一样的

于是第一行功效输出:李四

4:最后是 Change(ref p) 函数内部

C# 中的三个高级参数 ref

重点说明:这里内部的p地点和外部的p地点是一样的,没有产生变革
然后从头指向一个新的东西,,只是东西的值地点产生了变革。
备注:外部p地点=内部p地点,所以其指向的值都是新的东西的值。

于是第三行功效输出:张三

最终功效图如下:

最后结言: