当前位置: 首页 > news >正文

C# 值类型和引用类型详解

简介

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 的值,不影响 aConsole.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 的值,会影响 obj1Console.WriteLine(obj1.Value);  // 输出 20
Console.WriteLine(obj2.Value);  // 输出 20

值类型与引用类型的区别

特性值类型引用类型
存储位置栈存储引用,堆存储数据
存储内容保存数据本身保存数据的地址(引用)
赋值行为复制值复制引用,多个引用指向同一个对象
默认值默认值(如 int 为 0)默认值为 null
性能栈上分配,效率高堆上分配,需垃圾回收

可空类型(Nullable

值类型通常不能为 null,但可以通过 Nullable<T>T? 使其可为空。

示例:

int? a = null;
if (a.HasValue)Console.WriteLine(a.Value);
elseConsole.WriteLine("a is null");

特殊的引用类型:字符串

  • 字符串(string)是引用类型,但具有值类型的行为。

  • 因为字符串是 不可变的(Immutable),修改字符串实际上是创建了一个新对象。

string str1 = "Hello";
string str2 = str1;
str2 = "World";Console.WriteLine(str1);  // 输出 Hello
Console.WriteLine(str2);  // 输出 World
值类型与引用类型的转换
  • 装箱(Boxing):将值类型转换为引用类型。

  • 拆箱(Unboxing):将引用类型转换为值类型。

示例:

int a = 10;          // 值类型
object obj = a;      // 装箱,值类型变为引用类型
int b = (int)obj;    // 拆箱,将引用类型还原为值类型Console.WriteLine(a);  // 输出 10
Console.WriteLine(b);  // 输出 10

相关文章:

C# 值类型和引用类型详解

简介 在 C# 中&#xff0c;值类型和引用类型是两个基础的数据类型类别&#xff0c;它们的主要区别在于 存储位置 和 赋值方式。 值类型 值类型存储的是数据本身&#xff0c;分配在 栈 (Stack) 中。当一个值类型变量被赋值给另一个变量时&#xff0c;会复制值。 值类型的特点…...

计算机网络 —— 网络编程(TCP)

计算机网络 —— 网络编程&#xff08;TCP&#xff09; TCP和UDP的区别TCP (Transmission Control Protocol)UDP (User Datagram Protocol) 前期准备listen &#xff08;服务端&#xff09;函数原型返回值使用示例注意事项 accpect &#xff08;服务端&#xff09;函数原型返回…...

[Unity Shader] Shader基础光照3:环境光与自发光

在Unity中,光照是场景渲染的关键组成部分。正确使用环境光和自发光能够大大提高场景的真实感和视觉效果。本篇文章将详细介绍Unity中的环境光和自发光的基本概念,以及如何在编辑器和Shader中进行操作和实现。 1. 环境光(Ambient Light) 1.1 环境光的定义 环境光是场景中…...

云原生安全风险分析

一、什么是云原生安全 云原生安全包含两层含义&#xff1a; 面向云原生环境的安全具有云原生特征的安全 0x1&#xff1a;面向云原生环境的安全 面向云原生环境的安全的目标是防护云原生环境中基础设施、编排系统和微服务等系统的安全。 这类安全机制不一定具备云原生的特性…...

Redis 安装与配置指南

Redis 安装与配置指南 目录 安装说明 Linux 安装 Redis 3.0 压缩包上传服务器编译和安装修改配置启动 Redis关闭 Redis 卸载 RedisRedis 集群配置 Master 主库配置启动 Master 节点的 Redis 和 Sentinel客户登录验证Slave 从库配置查看集群数据验证 安装说明 Linux 安装 R…...

C语言Day13(c程序设计小红书+pta)

目录 &#xff08;一&#xff09;用函数调用实现&#xff0c;把最小的数字放在最前面&#xff0c;把最大的放在最后边 &#xff08;二&#xff09;使数字向后移m位 &#xff08;三&#xff09;用户自定义数据类型&#xff1a; &#xff08;四&#xff09;候选人计票数 &am…...

C++二十三种设计模式之迭代器模式

C二十三种设计模式之迭代器模式 一、组成二、特点三、目的四、缺点五、示例代码 一、组成 抽象聚合类&#xff1a;存储集合元素&#xff0c;声明管理集合元素接口。 具体聚合类&#xff1a;实现管理集合元素接口。 抽象迭代器类&#xff1a;声明访问和遍历聚合类元素的接口。 …...

【AI游戏】使用强化学习玩 Flappy Bird:从零实现 Q-Learning 算法(附完整资源)

1. 引言 Flappy Bird 是一款经典的休闲游戏&#xff0c;玩家需要控制小鸟穿过管道&#xff0c;避免碰撞。虽然游戏规则简单&#xff0c;但实现一个 AI 来自动玩 Flappy Bird 却是一个有趣的挑战。本文将介绍如何使用 Q-Learning 强化学习算法来训练一个 AI&#xff0c;使其能够…...

VSCode 中的 launch.json 配置使用

VSCode 中的 launch.json 配置使用 在 VSCode 中&#xff0c;launch.json 文件用于配置调试设置&#xff0c;特别是用来定义如何启动和调试你的应用。它允许你配置不同的调试模式、运行参数和调试选项。 基本结构 launch.json 文件位于 .vscode 文件夹内&#xff0c;可以通过…...

深度学习算法:开启智能时代的钥匙

引言 深度学习作为机器学习的一个分支&#xff0c;近年来在图像识别、自然语言处理、语音识别等多个领域取得了革命性的进展。它的核心在于构建多层的神经网络&#xff0c;通过模仿人脑处理信息的方式&#xff0c;让机器能够从数据中学习复杂的模式。 深度学习算法的基本原理…...

Clojure语言的并发编程

Clojure语言的并发编程 引言 在现代软件开发中&#xff0c;并发编程成为了处理多个任务、提高应用效率和响应速度的重要手段。尤其是在多核处理器逐渐成为主流的今天&#xff0c;如何高效利用这些计算资源是每个开发者面临的挑战。Clojure作为一种函数式编程语言&#xff0c;…...

MySQL学习记录1【DQL和DCL】

SQL学习记录 该笔记从DQL处开始记录 DQL之前值得注意的点 字段 BETWEEN min AND max 可以查询区间[min, max]的数值如果同一个字段需要满足多个OR条件&#xff0c;可以采取 字段 IN(数值1, 数值2, 数值3....)LIKE语句 字段 LIKE ___%%% 表示模糊匹配&#xff0c;_匹配一个字段…...

EasyExcel的应用

一、简单使用 引入依赖&#xff1a; 这里我们可以使用最新的4.0.2版本&#xff0c;也可以选择之前的稳定版本&#xff0c;3.1.x以后的版本API大致相同&#xff0c;新的版本也会向前兼容&#xff08;3.1.x之前的版本&#xff0c;部分API可能在高版本被废弃&#xff09;&…...

JS控制对应数据隐藏

首先需要获得到所有的input框&#xff0c;并声明一个空对象来存放&#xff0c;遍历所有的复选框&#xff0c;将他们中选中的放入对象&#xff0c;并设置键值为true&#xff0c;然后执行checkFalseValues(result)函数 function hideItem() {let checkboxes $(.setting_box inp…...

【剑指Offer刷题系列】数据流中的中位数

目录 问题描述示例示例 1&#xff1a; 思路解析方法一&#xff1a;使用两个堆&#xff08;最大堆和最小堆&#xff09;核心思路详细步骤示例分析优势适用场景 代码实现Python 实现&#xff08;方法一&#xff1a;使用两个堆&#xff09; 测试代码复杂度分析方法一&#xff1a;使…...

RabbitMQ高级篇之MQ可靠性 数据持久化

文章目录 消息丢失的原因分析内存存储的缺陷如何确保 RabbitMQ 的消息可靠性&#xff1f;数据持久化的三个方面持久化对性能的影响持久化实验验证性能对比Spring AMQP 默认持久化总结 消息丢失的原因分析 RabbitMQ 默认使用内存存储消息&#xff0c;但这种方式带来了两个主要问…...

C 语言奇幻之旅 - 第16篇:C 语言项目实战

目录 引言1. 项目规划1.1 需求分析与设计1.1.1 项目目标1.1.2 功能需求1.1.3 技术实现方案 2. 代码实现2.1 模块化编程2.1.1 学生信息模块2.1.2 成绩管理模块 2.2 调试与测试2.2.1 调试2.2.2 测试2.2.4 测试结果 3. 项目总结3.1 代码优化与重构3.1.1 代码优化3.1.2 代码重构 3.…...

[笔记] 使用 Jenkins 实现 CI/CD :从 GitLab 拉取 Java 项目并部署至 Windows Server

随着软件开发节奏的加快&#xff0c;持续集成&#xff08;CI&#xff09;和持续部署&#xff08;CD&#xff09;已经成为确保软件质量和加速产品发布的不可或缺的部分。Jenkins作为一款广泛使用的开源自动化服务器&#xff0c;为开发者提供了一个强大的平台来实施这些实践。然而…...

Git最便捷的迁移方式

#当公司要求git需要迁移时&#xff0c;你是不是感觉到束手无策。今天带来给大家最快&#xff0c;最便捷的迁移方式 这个命令是用于重命名git仓库中的远程仓库名。在这个命令中&#xff0c;我们将远程仓库的名字从"origin"改为"old-origin"。 git remote …...

【颜色分类--荷兰国旗问题】

问题 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c; 原地 对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库内置的 sort 函数的情况下…...

xrdp连接闪退情况之一

错误核查 首先使用命令vim ~/.xsession-errors&#xff0c;当里面的报错信息为WARNING **: Could not make bus activated clients aware of XDG_CURRENT_DESKTOPGNOME environment variable:Failed to execute child process “dbus-launch” (No such file or directory)&am…...

KubeVirt 进阶:设置超卖比、CPU/MEM 升降配、在线磁盘扩容

前两篇文章&#xff0c;我们分别介绍 Kubevirt 的安装、基本使用 以及 将 oVirt 虚拟机迁移到 KubeVirt&#xff0c;我们留了两个ToDo&#xff0c;一个是本地磁盘的动态分配&#xff0c;一个是固定 IP 的需求&#xff0c;本期我们先解决第一个&#xff0c;本地磁盘的动态分配。…...

(回溯法)leetcode39组合总和

第一个2开头&#xff0c;下面的子节点的集合元素均为2,5,3 但是在5开头&#xff0c;下面的子节点集合元素均为5,3 带着这个图的思路确定i和index的传递值 backtracking(i, nums,8,sum);用的是i而不是i1 // ConsoleApplication3.cpp : 此文件包含 "main" 函数。程序…...

【数据结构】二叉搜索树

目录 1. 二叉搜索树的概念 2. 二叉搜索树的性能分析 3.二叉搜索树的实现 3. 1.二叉搜索树的插入 3.2. 二叉搜索树的查找 3.3. 二叉搜索树的删除 3.4. 二叉搜索树的实现代码 4. 二叉搜索树key和key/value两种使用场景 4.1 key搜索场景&#xff1a; 4.2 key/value搜索场…...

高可用虚拟IP-keepalived

个人觉得华为云这个文档十分详细&#xff1a;使用虚拟IP和Keepalived搭建高可用Web集群_弹性云服务器 ECS_华为云 应用场景&#xff1a;虚拟IP技术。虚拟IP&#xff0c;就是一个未分配给真实主机的IP&#xff0c;也就是说对外提供数据库服务器的主机除了有一个真实IP外还有一个…...

CSS语言的多线程编程

CSS语言的多线程编程 引言 在现代Web开发中&#xff0c;CSS&#xff08;层叠样式表&#xff09;被广泛用于给网页添加样式。然而&#xff0c;CSS本身是一种声明性语言&#xff0c;在设计上并没有直接支持多线程编程的功能。实际上&#xff0c;CSS的解析和应用是由浏览器的渲染…...

电脑之一键备份系统(One Click Backup System for Computer)

电脑之一键备份系统 相信使用电脑的的人都遇到过&#xff0c;电脑系统崩溃&#xff0c;开机蓝屏等原因&#xff0c;这个时候你急着用电脑办公&#xff0c;电脑却给你罢工是多么气人了&#xff0c;其实可以给电脑做一个系统备份。 最近每天都有系统蓝屏崩溃&#xff0c;这个实难…...

R语言的正则表达式

R语言中的正则表达式深度解析 正则表达式&#xff08;Regular Expressions&#xff0c;简称Regex&#xff09;是一种用于描述字符串匹配规则的工具&#xff0c;广泛应用于数据处理、文本分析、数据清洗等多个领域。在R语言中&#xff0c;正则表达式被广泛应用于字符串的处理和…...

解决el-table表格数据量过大导致页面卡顿问题 又名《umy-ui---虚拟表格仅渲染可视区域dom的神》

后台管理系统的某个页面需要展示多个列表 数据量过多 页面渲染dom卡顿 经调研发现两个组件 pl-table和umy-ui &#xff08;也就是u-table&#xff09; 最终决定使用umy-ui 它是专门基于 Vue 2.0 的桌面端组件库 流畅渲染表格万级数据 而且他是对element-ui的表格做了二次优化…...

《机器学习》——贝叶斯算法

贝叶斯简介 贝叶斯公式&#xff0c;又称贝叶斯定理、贝叶斯法则&#xff0c;最初是用来描述两个事件的条件概率间的关系的公式&#xff0c;后来被人们发现具有很深刻的实际意义和应用价值。该公式的实际内涵是&#xff0c;支持某项属性的事件发生得愈多&#xff0c;则该属性成…...

零基础 监控数据可视化 Spring Boot 2.x(Actuator + Prometheus + Grafana手把手) (上)

一、安装Prometheus Releases prometheus/prometheus GitHubhttps://github.com/prometheus/prometheus/releases 或 https://prometheus.io/download/https://prometheus.io/download/ 1. 下载适用于 Windows 的二进制文件&#xff1a; 找到最新版本的发布页面&#xf…...

4.STM32F407ZGT6-独立看门狗

参考&#xff1a; 1.正点原子 前言&#xff1a; 看门狗是一个项目或者产品中肯定需要的功能部分&#xff0c;必须会。常见的两种看门狗类型&#xff0c;独立看门狗和窗口看门狗&#xff0c;各有使用的场景。总结记录独立看门狗一些知识点&#xff1a; 1.独立看门狗的概念。&am…...

RHCE实验-nfs及autofs

本次实验的目的&#xff1a;实现服务端的网络文件共享&#xff08;配置nfs&#xff09;,且实现客户端的自动挂载&#xff08;配置autofs&#xff09; 服务端配置&#xff1a; 关闭防火墙和selinux: 安装软件 [rootlocalhost ~]# yum install nfs-utils -y 创建需要被挂载的目…...

docker代理设置

最近遇到国内镜像无法下载的问题&#xff0c;因此需要配置docker代理来使其能够下载镜像 代理设置方法如下&#xff1a; 编辑 /etc/docker/daemon.json 文件&#xff1a; 配置 HTTP 和 HTTPS 代理&#xff1a; {"proxies": {"http-proxy": "http:/…...

死信交换机

什么是死信&#xff1f;什么是死信交换机&#xff1f; 在MQ中未能成功被消费的消息就被称之为死信&#xff0c;而死信交换机就用于存放死信消息。 消息转变成死信消息的原因&#xff1a; 消息被消费者拒绝或者需要重发&#xff08;nack、reject&#xff09; nack&#xff1a;消…...

cat命令详解

&#x1f3dd;️专栏&#xff1a;https://blog.csdn.net/2301_81831423/category_12872319.html &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” cat 是 Linux/Unix 中的一个非常常用的命令&…...

路由器的转发表

【4-24】 已知路由器R₁ 的转发表如表T-4-24 所示。 表T-4-24 习题4-24中路由器R₁的转发表 前缀匹配 下一跳地址 路由器接口 140.5.12.64/26 180.15.2.5 m2 130.5.8/24 190.16.6.2 ml 110.71/16 ----- m0 180.15/16 ----- m2 190.16/16 ----- ml 默认 11…...

腾讯云AI代码助手编程挑战赛-古诗词学习

一、作品介绍 在科技与文化深度交融的当下&#xff0c;“腾讯云 AI 代码助手编程挑战赛 - 每日古诗词” 宛如一颗璀璨的新星&#xff0c;闪耀登场。它绝非一场普通的赛事&#xff0c;而是一座连接编程智慧与古典诗词韵味的桥梁。 这项挑战赛以独特的视角&#xff0c;将每日古…...

积分系统的设计

1. 目的 学习是需要正反馈的&#xff0c;这样学员才能有源源不断的动力去继续学习。 为了激励学员&#xff0c;我们需要设定一个学习积分的排行榜系统。优秀的学员给予一定的奖励&#xff0c;比如奖励优惠券。大家互相比拼的&#xff0c;刺激学员持续学习&#xff0c;互相卷起…...

功能篇:spring事务配置

在 Java 应用程序中配置事务管理通常涉及使用 Spring 框架&#xff0c;因为 Spring 提供了强大的事务管理抽象&#xff0c;可以简化事务的配置和管理。Spring 支持两种类型的事务管理&#xff1a;编程式事务管理和声明式事务管理。 编程式事务管理 编程式事务管理是通过编写代…...

单元测试概述入门

引入 什么是测试&#xff1f;测试的阶段划分&#xff1f; 测试方法有哪些&#xff1f; 1.什么是单元测试&#xff1f; 单元测试&#xff1a;就是针对最小的功能单元&#xff08;方法&#xff09;&#xff0c;编写测试代码对其正确性进行测试。 2.为什么要引入单元测试&#x…...

PySpark学习笔记2-RDD算子,RDD持久化

RDD定义 RDD是弹性分布式数据集&#xff0c;是spark中的最基本的数据抽象&#xff0c;里面的元素可以并行计算 RDD的五大特性 RDD是有分区的&#xff0c;它的分区是数据存储的最小单位 RDD的方法会作用在所有分区上 RDD之间是有依赖关系的 KV型的RDD可以有分区器 RDD的分区会尽…...

windows10下安装Microsoft SQL Server 2016

一、下载安装包 网站&#xff1a;MSDN, 我告诉你 - 做一个安静的工具站 选择需要的版本&#xff0c;点击详细信息&#xff0c;复制ed2k链接&#xff0c;打开eMule或迅雷&#xff0c;新建下载&#xff0c;粘贴链接&#xff0c;开始下载。 下载好的文件是一个.iso镜像文件。 二、…...

开关不一定是开关灯用 - 命令模式(Command Pattern)

命令模式&#xff08;Command Pattern&#xff09; 命令模式&#xff08;Command Pattern&#xff09;命令设计模式命令设计模式结构图命令设计模式涉及的角色 talk is cheap&#xff0c; show you my code总结 命令模式&#xff08;Command Pattern&#xff09; 命令模式&…...

急速了解什么是GPU服务器

GPU服务器是一种专门配置了高性能图形处理器&#xff08;GPU&#xff09;的服务器&#xff0c;旨在提供高性能计算、深度学习、科学计算等多种场景的计算服务。与传统的CPU服务器相比&#xff0c;GPU服务器在处理并行密集型计算任务时具有显著优势。本文将详细介绍GPU服务器的定…...

word论文排版常见问题汇总

word论文排版常见问题汇总 常用快捷键&#xff1a; Alt F9 正常模式与域代码模式切换 Ctrl F9 插入域代码 F9 刷新域代码显示&#xff0c;要注意选定后刷新才会有效果 word中在当前列表的基础上修改列表 在使用word时&#xff0c;我们会定义一个列表&#xff0c;并将其链接…...

作业:IO:day3

思维导图 使用3语言编写一个简易的界面 界面如下 1&#xff1a;标准输出流 2&#xff1a;标准错误流 3&#xff1a;文件流 要求&#xff1a; 按1的时候&#xff0c;通过printf输出数据&#xff0c; 按2的时候&#xff0c;通过perror输出数据&#xff0c; 按3的时候将输入写入文…...

H266/VVC 帧内预测 PDPC 技术

位置决定的帧内预测组合 PDPC 在 VVC 中&#xff0c;对于帧内预测的 Planar 模式、DC 模式和几种角度模式需要使用 PDPC (position dependent intra prediction combination) 方法进一步处理。 PDPC 用于 DC 模式、Planar 模式、小于等于水平模式(模式 18) 的角度模式、大于等于…...

微信小程序mp3音频播放组件,仅需传入url即可

// index.js // packageChat/components/audio-player/index.js Component({/*** 组件的属性列表*/properties: {/*** MP3 文件的 URL*/src: {type: String,value: ,observer(newVal, oldVal) {if (newVal ! oldVal && newVal) {// 如果 InnerAudioContext 已存在&…...

Hadoop3.x 万字解析,从入门到剖析源码

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…...