news 2026/5/13 14:52:43

C#新手向:搞懂“值类型”与“引用类型”及其对程序性能的影响

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C#新手向:搞懂“值类型”与“引用类型”及其对程序性能的影响
int a = 10; int b = a; b = 20; // 此时 a 还是 10,没问题。 List<int> list1 = new List<int> { 1, 2, 3 }; List<int> list2 = list1; list2.Add(4); // 此时 list1 里竟然也变成了 {1, 2, 3, 4}?!

这背后的“罪魁祸首”就是我们要聊的值类型(Value Type)​ 和引用类型(Reference Type)

1. 核心概念:快递柜 vs 仓库门牌号

在C#中,所有类型都派生自System.Object,但内存分配方式截然不同。

📦 值类型:自带储物柜(Stack)

代表成员struct(结构体)、enum(枚举)、intfloatdoublebool

想象一下你去超市存包,使用的是自带锁的储物柜

  • 你(a变量)手里拿着钥匙,柜子里直接放着你的物品(数值10)。

  • 当你复制给b时,系统直接拷贝了一份物品放到另一个空柜子里。

  • 结果:两个柜子互不干扰,你把b柜子里的东西换成20a柜子里的10毫发无伤。

🏠 引用类型:租了一个大仓库(Heap)

代表成员class(类)、interface(接口)、stringarray(数组)、delegate

想象一下你租了一个巨大的物流仓库。

  • 你(list1变量)手里拿的不是货物,而是一张仓库的门牌号(地址/指针)

  • 当你把门牌号给了list2时,你们俩手里拿的是同一张门牌号

  • 结果:你们指向的是同一个仓库。无论谁往里面搬货(Add(4)),对方去看的时候,仓库里的东西肯定变多了。

2. 了解内存:Stack(栈)与 Heap(堆)

光靠比喻还不够,我们要稍微深入一点点底层(放心,不难)。

特性值类型(Value Type)引用类型 (Reference Type)
存储位置通常存储在栈 (Stack)​ 上数据存储在堆 (Heap)​ 上,引用地址存储在栈上
赋值行为复制数据本身​ (拷贝)复制引用地址​ (浅拷贝)
内存释放离开作用域立即释放GC (垃圾回收器)​ 定期清理
访问速度快 (CPU缓存命中率高)相对慢 (需要寻址)
// 值类型示例 int num1 = 100; int num2 = num1; // 复制了 100 这个数字 // 引用类型示例 Person p1 = new Person() { Age = 18 }; Person p2 = p1; // 复制了 "new Person()" 这个对象的内存地址 p2.Age = 20; Console.WriteLine(p1.Age); // 输出 20 (因为 p1 和 p2 指向同一个人)

3. 总结与最佳实践

为了写出高性能的C#代码,请记住这几点:

  1. 简单数据用struct(值类型):当你只需要封装少量数据(如坐标 Point、颜色 Color、复数 Complex),且没有继承需求时,用structclass更快,因为不需要GC介入。

  2. 大对象用class:如果对象很大,或者需要被多处共享(如配置对象、服务实例),用class

  3. 不要过度优化:过早优化是万恶之源。99%的情况下,代码可读性和业务逻辑正确更重要。只有在性能瓶颈分析(Profiling)后,再去抠这些细节。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/13 14:52:26

告别Claude Code封号烦恼使用Taotoken稳定接入Anthropic模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 告别Claude Code封号烦恼使用Taotoken稳定接入Anthropic模型 对于频繁使用Claude Code进行编程辅助的开发者而言&#xff0c;直接依…

作者头像 李华
网站建设 2026/5/13 14:51:26

Kali Linux下Autopsy实战:手把手教你分析NTFS镜像与恢复JPEG文件

Kali Linux下Autopsy实战&#xff1a;从NTFS镜像分析到JPEG文件恢复的完整指南 在数字取证领域&#xff0c;Autopsy作为一款开源的图形化工具&#xff0c;已经成为安全从业者和CTF爱好者的必备利器。它基于The Sleuth Kit引擎&#xff0c;提供了从基础文件分析到高级元数据检查…

作者头像 李华
网站建设 2026/5/13 14:50:24

19. 螺旋矩阵

给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。方法&#xff1a;模拟class Solution(object):def generateList(self,x,y,m,n,matrix):L[]# x,yfor i in range(n-1):L.append(matrix[x][yi])# x,yn-1for i in range(m…

作者头像 李华
网站建设 2026/5/13 14:49:36

热电制冷与压缩机制冷:原理、性能与应用对比

1. 热电制冷与传统压缩机制冷的技术原理对比1.1 压缩机制冷系统工作原理传统压缩机制冷系统由三个核心部件构成闭环工作回路&#xff1a;蒸发器、压缩机和冷凝器。这个系统利用制冷剂的相变过程实现热量转移&#xff1a;蒸发器&#xff1a;低压液态制冷剂通过膨胀阀后压力骤降&…

作者头像 李华
网站建设 2026/5/13 14:49:16

RLHF:人类反馈强化学习入门详解

RLHF&#xff1a;人类反馈强化学习入门详解&#x1f4dd; 本章学习目标&#xff1a;通过本章学习&#xff0c;你将全面掌握"RLHF&#xff1a;人类反馈强化学习入门详解"这一核心主题&#xff0c;建立系统性认知。一、引言&#xff1a;为什么这个话题如此重要 在人工智…

作者头像 李华
网站建设 2026/5/13 14:48:59

GitHub Enterprise MCP服务器:企业级代码管理的AI智能助手

1. 项目概述&#xff1a;当GitHub Enterprise遇上MCP&#xff0c;企业级代码管理的“智能副驾”最近在折腾企业内部的开发工具链&#xff0c;发现一个痛点&#xff1a;我们团队重度依赖GitHub Enterprise Server&#xff08;GHES&#xff09;进行代码托管和协作&#xff0c;但日…

作者头像 李华