C#基础知识学习笔记——值类型与引用类型剖析和C# 中方法参数的 in、out 和 ref 关键字
C#基础知识学习笔记——值类型与引用类型剖析和C# 中方法参数的 in、out 和 ref 关键字1. 值类型与引用类型剖析简介在C#中值类型和引用类型是两个基础的数据类型类别它们的主要区别在于 存储位置 和 赋值方式。值类型值类型存储的是数据本身分配在 栈 (Stack) 中。当一个值类型变量被赋值给另一个变量时会复制值。值类型的特点内存分配存储在栈上。存储内容直接保存数据。复制行为赋值时复制数据两个变量互不影响。默认值初始化为类型的默认值如int为 0。不可为null除非是可空类型如int?。值类型的常见示例基本数据类型int、double、bool、char、float、decimal结构体struct例如DateTime、Point枚举enum值类型示例int a 10; // 值类型变量 int b a; // 将 a 的值赋值给 b b 20; // 修改 b 的值不影响 a Console.WriteLine(a); // 输出 10 Console.WriteLine(b); // 输出 20引用类型引用类型存储的是数据的地址引用实际数据存储在 堆 (Heap) 中。当一个引用类型变量被赋值给另一个变量时会复制引用即两个变量指向同一个对象。引用类型的特点内存分配引用存储在栈上数据存储在堆上。存储内容保存对数据的引用地址而不是数据本身。复制行为赋值时复制引用多个变量指向同一块内存。默认值初始化为null。可以为null。引用类型的常见示例类class接口interface委托delegate字符串string数组array引用类型示例class MyClass { public int Value; } MyClass obj1 new MyClass(); obj1.Value 10; MyClass obj2 obj1; // 将 obj1 的引用赋值给 obj2 obj2.Value 20; // 修改 obj2 的值会影响 obj1 Console.WriteLine(obj1.Value); // 输出 20 Console.WriteLine(obj2.Value); // 输出 20特性值类型引用类型存储位置栈栈存储引用堆存储数据存储内容保存数据本身保存数据的地址引用赋值行为复制值复制引用多个引用指向同一个对象默认值默认值如 int 为 0默认值为 null性能栈上分配效率高堆上分配需垃圾回收2. C# 中方法参数的 in、out 和 ref 关键字在 C# 中in、out和ref是用于修饰方法参数的关键字它们决定了参数的传递方式以及在方法内部的使用规则。这些关键字允许按引用传递参数而不是按值传递从而提高性能或实现特定功能。ref关键字读写引用作用传递变量的引用方法内对该变量的任何修改都会直接影响原始变量。要求调用时变量必须已赋值初始化。使用场景当你需要方法修改传入的值并让调用方看到修改结果时。​ 示例void ModifyValue(ref int number) { number 10; // 直接修改原始变量 } int num 5; ModifyValue(ref num); // 调用时需显式写 ref Console.WriteLine(num); // 输出 15特点​ 参数在调用前必须初始化。​ 方法内部可以读取和修改参数。out关键字只写输出作用用于从方法中返回额外的一个或多个值类似于“多返回值”。要求调用前无需初始化变量。方法在返回之前必须为所有out参数赋值。经典用法int.TryParse模式。示例bool TryGetValue(out string result) { result 成功赋值; // 必须赋值 return true; } // 调用时变量无需先赋值 TryGetValue(out string output); // 可内联声明变量 Console.WriteLine(output); // 输出 成功赋值特点​ 参数在调用前无需初始化。​ 方法内部必须为参数赋值否则编译报错。​ 很多人在参数前加ref以为只是“传引用”而已但深层逻辑是区分传值和传引用。in关键字只读传入作用以引用方式传递参数但方法内不能修改它。主要用于避免值类型如struct在传参时发生拷贝从而提升性能。要求调用前变量必须已初始化。注意传递只读引用编译器会阻止修改但若参数是引用类型类你依然可以修改其成员只是不能重新赋值引用本身。示例void ProcessLargeStruct(in BigStruct data) { // data.Field 10; // 编译错误不能修改 int value data.Field; // 可以读取 } BigStruct myData new BigStruct(); ProcessLargeStruct(in myData); // 可选显式写 in特点​ 参数在调用前必须初始化。​ 方法内部只能读取参数不能修改。关键字的区别​in只读引用传递参数必须初始化方法内部不能修改。​out输出参数调用前无需初始化方法内部必须赋值。​ref引用传递参数必须初始化方法内部可读写。如何选择想修改传入的变量 → 用ref想返回多个值且其中一些可能未初始化 → 用out想避免拷贝大结构体且不需要修改 → 用in如果只是普通单向传参且参数是引用类型class默认就传引用无需额外关键字。本质不加修饰默认是传值复制变量的内容。如果变量是引用类型复制的是地址所以能改对象属性如果变量是值类型复制的是数据改不了原变量。艰难点加了ref或out传递的是变量本身的别名托管指针。无论值类型还是引用类型方法内对参数赋新值如param new MyClass()都会直接改变外部传入的原始变量指向。in的困惑它是只读的ref看似简单但传入大结构体时能避免拷贝提升性能很多人根本不知道这个优化场景。

相关新闻

Java爬虫一出,数据全得跪着叫爸爸

Java爬虫一出,数据全得跪着叫爸爸

将网络爬虫的原理以及分类剖析一下!当下, 每日都有海量的数据于网页当中生成被产出。这些看起来好像并非是与紧密关联的相关数据, 一般而言能够存在着很深的、极为密切的联系。企业去获取以及处理数据得要付出相当巨大的代价, 然而运用网络爬虫能够迅速且高效地把数…

2026/7/27 6:37:18阅读更多 →
深入解析ARM Cortex-M4 Flash预取与交错存储架构优化

深入解析ARM Cortex-M4 Flash预取与交错存储架构优化

1. 项目概述与核心价值在嵌入式开发领域,尤其是基于ARM Cortex-M内核的微控制器应用中,我们常常将注意力集中在CPU主频、外设丰富度上,却容易忽略一个对系统性能影响更为深远的基础组件:存储器子系统。一个高效的存储器架构&#…

2026/7/27 6:37:18阅读更多 →
基于YOLOv26的击剑运动员姿态识别与动作分析系统

基于YOLOv26的击剑运动员姿态识别与动作分析系统

1. 项目概述击剑运动对运动员的姿态和动作精度有着极高的要求。作为一名长期从事计算机视觉研究的工程师,我最近完成了一个基于YOLOv26的击剑运动员姿态识别与动作分析系统。这个项目旨在利用深度学习技术解决传统击剑训练中依赖教练肉眼观察和经验判断带来的主观性…

2026/7/27 6:35:18阅读更多 →
商业视频监控系统智能化升级与EasyGBS平台实践

商业视频监控系统智能化升级与EasyGBS平台实践

1. 商业场所视频监控的现状与挑战现代商业场所的视频监控系统早已超越了简单的安全防范功能,正逐步演变为支撑商业运营决策的核心基础设施。作为一名在安防行业深耕多年的从业者,我见证了商业监控系统从模拟到数字、从孤立到联网、从被动录像到主动分析的…

2026/7/27 7:55:24阅读更多 →
小熊猫Dev-C++:你的第一个C++开发环境终极指南

小熊猫Dev-C++:你的第一个C++开发环境终极指南

小熊猫Dev-C:你的第一个C开发环境终极指南 【免费下载链接】Dev-CPP A greatly improved Dev-Cpp 项目地址: https://gitcode.com/gh_mirrors/dev/Dev-CPP 你是否正在寻找一款轻量级C开发环境?厌倦了复杂配置和臃肿的IDE?小熊猫Dev-C&…

2026/7/27 7:55:24阅读更多 →
AI驱动营销转型:从碎片化内容到智能品牌建设

AI驱动营销转型:从碎片化内容到智能品牌建设

1. 营销范式革命:从"大广告"到"碎片化内容"的必然转型上世纪90年代,秦池酒业以6666万元天价夺得央视标王,次年销售额直接从1亿飙升至9.5亿。这种"春晚效应"印证了中心化媒体时代的黄金法则——品牌只需集中火力…

2026/7/27 7:55:24阅读更多 →
TMS320VC5509A DSP内存架构与外部接口配置实战指南

TMS320VC5509A DSP内存架构与外部接口配置实战指南

1. 项目概述与核心价值在嵌入式DSP系统开发中,内存架构和外部接口的配置,往往是决定项目成败的关键,却又最容易被新手开发者忽视。我见过太多项目,算法写得漂亮,但一跑起来就卡顿、丢数据,最后追根溯源&…

2026/7/27 7:55:24阅读更多 →
《派出你的AI同事:WorkBuddy案例实战》016:连接器故障排查实录

《派出你的AI同事:WorkBuddy案例实战》016:连接器故障排查实录

《派出你的AI同事:WorkBuddy案例实战》016:连接器故障排查实录 📌 卷三 第二部分 会调用工具的 AI 同事 第4章 连接器实战 4.4 4.4 连接器故障排查实录 背景与痛点 连接器把 AI 同事接进真实系统,但“接上了”不等于“一直好用”。实际跑起来,你迟早会撞上这几类故障…

2026/7/27 7:55:24阅读更多 →
Golang学习-冒泡排序(Bubble Sort)

Golang学习-冒泡排序(Bubble Sort)

冒泡排序(Bubble Sort) 一、算法思想 冒泡排序的核心思想非常朴素:相邻元素两两比较,如果前一个比后一个大就交换它们。每一轮"冒泡"都会把当前未排序部分的最大值"浮"到最右端——就像气泡从水底往上冒一样&…

2026/7/27 7:53:24阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/27 1:14:34阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/27 1:14:52阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/27 1:14:56阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:24阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:24阅读更多 →
2007-2023年各市区县生态文明建设示范区DID

2007-2023年各市区县生态文明建设示范区DID

数据简介 自改革开放以来,我国依赖高投入、高资源消耗和高污染等传统发展模式实现了经济短期内的快速增长, 然而这也导致了严重的生态环境危机。因此,国家有力于推动企业高质量经济发展,协同生态保护的方针,从而从201…

2026/7/27 0:00:24阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/25 23:03:25阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/26 19:05:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/26 19:05:21阅读更多 →