23值传递和引用传递

值传递和引用传递

值类型在复制的时候,传递的是这个值得本身。
引用类型在复制的时候,传递的是对这个对象的引用(在堆中的内存地址)。

比如:
写一个类

public class Person
        {
            private string _name;
            public string Name
            {
                get { return _name; }
                set { _name = value; }
            }

        }

下面通过复制值类型和引用类型来得出结论

            //值传递
            int a1 = 10;
            int a2 = a1;
            a2 = 20;
            Console.WriteLine(a1);//10
            Console.WriteLine(a2);//20

            //引用传递
            Person p1 = new Person();
            p1.Name = "张三";

            Person p2 = p1;//这里是直接给的引用(内存地址),也就是没有new开辟空间,两个对象都用一个空间
            p2.Name = "李四";
            Console.WriteLine(p1.Name);//李四

上面步骤用图来理解如下:
image

可以看到,在复制对象给p2时,他们的引用都一样
image

这样通过方法传参数也是传引用
image



ref原理也是将值传递变为引用传递

image

可以看到,在调用方法时,里面的参数和外面的参数在栈上地址一样
image

字符串虽然也是引用传递,但是它比较特殊,字符串有不可变性,所以每次赋值新的字符串都等于开辟了一个新的空间

string str1 = "张三";

            string str2 = str1;

            str2 = "李四";

            Console.WriteLine(str1);//张三
posted @   青仙  阅读(49)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示