再聊一次值类型和引用类型
发布时间:2025-11-05 14:05:16 作者:玩站小弟
我要评论
C#值类型,作为函数形参,形参被修改,不影响原值。这是我们在初始学习编程时需要记住的内容,我们也是一直这样践行的。先说结论:这是不准确的。为什么提出这样看似很浅显的问题,是因为有次我在使用ArrayS
。

C#值类型,再聊作为函数形参,次值形参被修改,类型不影响原值。和引
这是用类我们在初始学习编程时需要记住的内容,我们也是再聊一直这样践行的。
先说结论:这是次值不准确的。
为什么提出这样看似很浅显的类型问题,是和引因为有次我在使用ArraySegment值类型时,有感而发。用类
这是再聊一个托管的值类型,表示array的源码下载次值一个片断, 在用做websocket接收数据的类型载体时我发现每次值传递后, 这个ArraySegment貌似发生了变化。和引这勾起了我的用类探究欲。
我们做一个简单的实验, 来证明【值类型作为函数形参, 形参被修改,不影响原值】不准确。
struct Slice { public Array Array { get; set; } public int Offset { get; set; } public int Count { get; set; } } class Program { static void Main(string[] args) { var slice = new Slice { Array = Array.CreateInstance(typeof(int), 5)}; Test(slice); foreach(var i in slice.Array) { Console.WriteLine(i); } Console.ReadLine(); } // 值类型传参,值传给tmp变量 static void Test(Slice tmp) { tmp.Array.SetValue(1,1); tmp.Offset = 1; tmp.Count = 1; } } // 输出 0 1 0 0 0slice变量的引用类型属性体现了变化,值类型Offset Count属性不会变化。

这个简单的Demo告诉我们:
大部分情况下:“值类型作为函数形参,形参被修改,不影响原值”, 但是如果修改的免费源码下载是值类型的引用类型字段,原值类型照样能体现修改。
归根到底由值类型和引用类型的特性决定:
值类型的变量直接存储数据,而引用类型的变量持有的是数据的引用,数据存储在数据堆中;
宽泛地讲:函数传参,都是值传递(拷贝), 只是引用类型传递的是原对象的引用或地址值。
亿华云相关文章
联想笔记本电脑Win8系统重装教程(详细步骤教你轻松重新安装Win8系统)
摘要:在使用联想笔记本电脑的过程中,有时我们可能会遇到系统出现故障或者运行缓慢的情况。这时,重新安装操作系统是一个解决问题的有效方法。本文将详细介绍如何重装Win8系统,帮助您轻松解决笔...2025-11-05
虚拟机下面安装了ubuntu系统,显示的屏幕只有那么一小块儿,不知道如何才能全屏,那么如何全屏呢?且看下面经验。1、打开虚拟机,并点击要更改成全屏的那个ubuntu系统的电源,我的虚拟机名字就叫ubu2025-11-05- 一、使用命令设置ubuntu的ip地址 1.修改配置文件blacklist.conf禁用IPV6: 2.在文档最后添加 blacklist ipv6,然后查看修改结果: 3.设置IP设置网卡eth0的2025-11-05
华为荣耀3手环(探索华为荣耀3手环的功能与优势,以及对用户生活的帮助和改善)
摘要:在现代社会,随着科技的迅猛发展,智能穿戴设备成为人们生活中不可或缺的一部分。而华为荣耀3手环作为一款领先的智能手环产品,在市场上引起了广泛关注。本文将以华为荣耀3手环为主题,探讨其...2025-11-05



最新评论