C#中值类型与引用类型的存储

 

目录

值对象与引用对象的存储 

引用对象的成员存储


值对象与引用对象的存储 

        数据项的类型定义了存储数据需要的内存大小及组成该类型的数据成员。类型还决定了对象在内存中的存储位置——栈或堆。

        C#中类型分为两种:值类型和引用类型,这两种类型的对象在内存中的存储方式不同。

  • 值类型住需要一段单独的内存,用于存储实际的数据
  • 引用类型需要两段内存
    1. 第一段存储实际的数据,它总是在堆中。
    2. 第二段是一个引用,指向数据在堆中的存放位置

示例如下:

引用对象的成员存储

如果存储了一个对象,该对象有多个成员,成员既有值对象又有引用对象时,存储情况如何呢?

  • 首先,引用类型对象的数据部分始终存放在堆里
  • 值类型对象,或引用类型数据的引用部分可以存放在堆里,也可以存放在栈里,这依赖于实际环境。

例如有这么一个类:

public class Student(int age, string name)
{public int Age { get; set; } = age;public string Name { get; set; } = name;
}

 当你在主函数中声明一个类对象时:

Student student = new Student(18, "小王");

首先,构造student对象用了new,所以student的实例数据存储在堆上,其引用部分放在堆里。

那么Age成员是值类型是否会被放在栈里呢?

答案是否定的。

请记住一个引用类型,其实例数据部分始终存放在堆里,既然两个成员都是对象数据的一部分,那么他们都会被存放在堆里,无论他们诗值类型还是引用类型。

  • 尽管Age是值类型,但是它也是student实例数据的一部分,因此和对象的数据一起被存放在堆里
  • Name是引用类型,所以它的数据部分始终会存放在堆里,不同的是,它的引用部分也被存放在堆里,封装在Student对象的数据部分。

        记住上面的两张图,搞不清楚时,自己划一下,以后分析值对象和引用对象在内存的位置就心里有数了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/788676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中介者模式:优雅解耦的利器

在软件设计中,随着系统功能的不断扩展,对象之间的依赖关系往往会变得错综复杂,导致系统难以维护和扩展。为了降低对象之间的耦合度,提高系统的可维护性和可扩展性,设计模式应运而生。中介者模式(Mediator P…

【蓝桥杯 C++高级组省赛以及2020年-蓝桥杯C++省赛合集+部分答案】

一、选择题(单项选择,每空30分) 请将选择题答案填入答题卡蓝色框内 第一题(难度系数 1) 结构化程序所要求的基本结构不包括( )。 A.顺序结构 B.GOTO()跳转 C.选择(分支)结构 D.重复(循环)结构 第二题&#xff…

记录一下做工厂的打印pdf程序

功能:在网页点击按钮调起本地的打印程序 本人想到的就是直接调起方式,网上大佬们说用注册表的形式来进行。 后面想到一种,在电脑开机时就开启,并在后台运行,等到有人去网页里面进行触发,这时候就有个问题&a…

银行监管报送系统介绍(十五):金融审计平台

《“十四五”国家审计工作发展规划》中重点强调,金融审计:以防范化解重大风险、促进金融服务实体经济,推动深化金融供给侧结构性改革、建立安全高效的现代金融体系为目标,加强对金融监管部门、金融机构和金融市场运行的审计。 —…

面试题:MySQL 事务 日志 MVCC

事务的特性 ACID 事务的隔离级别 并发事务问题 脏读:一个事务读到另一个事务还没有提交的数据不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同幻读:一个事务按照条件查询数据时,没有对应的数据行&#xf…

Oracle EBS AR接口和OM销售订单单价为空数据修复

最近,用户使用客制化Web ADI 批量导入销售订单行功能,把销售订单行的单价更新成空值,直到发运确认以后,财务与客户对帐才发现大量销售订单的单价空,同时我们检查AR接口发现销售订单的单价和金额均为空。 前提条件 采用PAC成本方式具体问题症状 销售订单行的单价为空 Path:…

Redhat 7.9 安装dm8配置文档

Redhat 7.9 安装dm8配置文档 一 创建用户 groupadd -g 12349 dinstall useradd -u 12345 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba passwd dmdba二 创建目录 mkdir /dm8 chown -R dmdba:dinstall /dm8三 配置/etc/security/limits.conf dmdba soft nproc 163…

文心一言 vs GPT-4 —— 全面横向比较

对于文心一言和 GPT-4 这两者之间的全面横向比较,我们可以从多个方面来看待它们的区别和优劣势。 文心一言 文心一言是一款基于深度学习的中文文本生成模型,专注于生成优美的古风诗句和语录。以下是它的一些特点: 专注于古风诗句和语录: 文…

在CentOS 7上安装Python 3.7.7

文章目录 一、实战步骤1. 安装编译工具2. 下载Python 3.7.7安装包3. 上传Python 3.7.7安装包4. 解压缩安装包5. 切换目录并编译安装6. 配置Python环境变量7. 使配置生效8. 验证安装是否成功 二、实战总结 一、实战步骤 1. 安装编译工具 在终端中执行以下命令 yum -y groupin…

发挥ChatGPT潜能:让学术论文写作更具创新性

ChatGPT无限次数:点击直达 发挥ChatGPT潜能:让学术论文写作更具创新性 在当今信息爆炸的时代,学术论文写作已经成为许多研究人员、学生和学者必不可少的工作。然而,很多人在写作过程中常常会遇到一些难题,比如创意枯竭、论点表达…

XRDP登录ubuntu桌面闪退问题

修改 /etc/xrdp/startwm.sh unset DBUS_SESSION_BUS_ADDRESS unset XDG_RUNTIME_DIR . $HOME/.profile

javascript常见的事件属性

焦点事件 focus/blur <input type"text" /><script>const input document.querySelector("input")// 绑定焦点事件input.addEventListener("focus" ,function(){console.log("有焦点触发")})// 失去焦点事件input.addEve…

Vulkan Material 设计学习

在学习 http://xiaopengyou.fun/public/2019/09/20/20_Material/ 的时候遇到的一些问题 初始化 初始化的时候 VkWriteDescriptorSet 把 ring buffer 绑定到 descriptor set 在每帧的最后&#xff0c;提交完 uniform buffer 的数据之后&#xff0c;vkCmdBindDescriptorSets 把…

Git分支提交时自动大写 fatal: the remote end hung up unexpectedly

先说结论&#xff1a; 进入 .git/refs/heads目录&#xff0c;会看到Feature文件夹&#xff0c;重命名为feature即可。 表现&#xff1a; 通过终端命令创建的分支 git checkout -b feature/name 使用git push后自动变成了Feature/name 并且有时候在本地创建feature/1234567…

合宙4G模块Air724UG调试过程(短信发送、上传数据到华为云IOT)

合宙Air724UG-4G模块AT指令调试接线演示 一、前言 上海合宙Air724UG模块是一款高性能的4G Cat.1通信模组(全网通模块,支持移动、联通、电信,支持短信和网络通信),为开发者提供了丰富的接口和开发方式。 在本文中,将详述调试与集成该模块的关键步骤: (1)从基础硬件配…

vim脚本的语言语法

本文结构&#xff1a; a、简介 b、Vim 脚本语言的一些基本语法和概念 a、Vim 脚本语言&#xff08;Vimscript&#xff09;是 Vim 编辑器用于自动化任务和扩展功能的脚本语言。Vimscript 提供了一套丰富的命令、函数和变量&#xff0c;允许用户自定义快捷键、映射、插件和更多…

CSS面试题常用知识day03

大家好我是没钱的君子下流坯&#xff0c;用自己的话解释自己的知识 前端行业下坡路&#xff0c;甚至可说前端已死&#xff0c;我还想在前段行业在干下去&#xff0c;所以从新开始储备自己的知识。 从CSS——>Javascript——>VUE2——>Vuex、VueRouter、webpack——>…

SVM简介 详细推导 核函数 线性可分 非线性可分

注意&#xff1a;由于该文章由jupyter nbconvert导出&#xff0c;若单独执行代码可能出现变量找不到或者没有导入库的情况&#xff0c;正确的做法是将所有的代码片段按顺序放到一个.py文件里面或者按顺序放入一个.ipynb文件的多个代码块中。 SVM(Support Vector Machine) Vap…

49岁前港姐退圈出嫁「南丫岛王子」,打排卵针高龄连生两女。

现年49岁的吴忻熹&#xff08;原名吴文忻&#xff09;1998年参选香港小姐夺得季军入行&#xff0c;在TVB签约发展平平&#xff0c;继而转战影坛&#xff0c;凭性感演出而为人熟悉。其后她在2011年嫁给有「南丫岛王子」之称的金融才俊&#xff0c;并在近40岁开始诞下两名女儿。吴…

Git 多人协作开发

文章目录 项目/仓库名称修订历史项目说明书代码工作流程项目/仓库名称 任务名称: 任务描述: 任务优先级:1(1最优先) 周期:10ms和1ms README.md为markdown语言编写的文件,可使用typora软件进行读写。 修订历史 版本时间更新说明修订者V0.12023/10/27base版本项目说明书…