C#值类型和引用类型、赋值、区别、相同点

news2024/12/24 9:00:34

C#值类型和引用类型

**前言:**在C#中变量分为以下几种类型:值类型(Value Types),引用类型(Reference Types),指针类型(Pointer Types);指针类型(变量存储另一种类型变量的地址)与C++中的使用方式一致,主要分析值类型和引用类型。

1.值类型:

(1)所有的值类型都隐式派生自System.Value.Type,包括整型(byte,int),浮点型(float,double,decimal),布尔型(bool),字符型(char),结构体(Struct),枚举类型(enum),可空类型。
(2)值类型的变量,直接存储数据,数据存放在栈中(Stack)。
(3)值类型的变量声明后,不管是否已经赋值,编译器为其分配内存。
(4)所有的值类型都是Seal类(密封类),无法派生出新的类型。

2.引用类型:

(1)所有的引用类型直接派生于System.Object,包括字符串(String),数据(Array),类(Class),接口(Interface),委托(delegate),基类型(Object)。
(2)引用类型的变量持有的是数据的引用(可以理解为指针,地址),存放在栈(Stack)中,数据存放在堆(Heap)中。
(3)引用类型声明后,只在栈中分配一小片内存用于容纳一个地址,而此时没有在堆上分配内存空间。
(4)当使用new创建一个引用类型的实例时,分配堆上的内存空间,并把堆上空间的地址保存到栈上分配的小片空间中。
在这里插入图片描述

3.值类型和引用类型的区别和相同点

相同点:(1)都可以实现接口(结构体也可以实现接口);

区别:(1)引用类型可以派生出新的类型,而值类型不可以

(2)引用类型可以包含null值,而值类型不能

4.值类型变量和引用类型变量的赋值

(1)将值类型的变量赋值给另一个变量,会执行一次赋值,复制的是栈中的数据。
(2)将引用类型的变量赋值给另一个引用类型变量,复制的是引用类型变量存储在栈中的内存地址,在赋值后就会多个变量指向同一个引用对象实例。

			Console.WriteLine("#####################下面是值类型和引用类型赋值测试代码#####################");
            //值类型赋值
            int a = 5;//不赋值,默认值是0
            int b = a;
            Console.WriteLine($"默认值: a={a},b={b}");
            a = 10;
            Console.WriteLine($"修改a的值后: a={a},b={b}");
            b = 20;
            Console.WriteLine($"修改b的值后: a={a},b={b}");

            //创建了一个学生类,同时包含姓名字段
            //引用类型赋值
            Student stu1 = new Student();
            stu1.Age = 18;
            Student stu2 = stu1;
            Console.WriteLine($"默认值: stu1.Age={ stu1.Age}, stu2.Age={stu2.Age}");
            stu1.Age = 28;
            Console.WriteLine($"修改stu1.age的值后:stu1.Age={ stu1.Age}, stu2.Age={stu2.Age}");
            stu2.Age = 38;
            Console.WriteLine($"修改stu2.age的值后: stu1.Age={ stu1.Age}, stu2.Age={stu2.Age}");

            Console.ReadKey();

运行结果:
在这里插入图片描述

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

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

相关文章

【canvas】canvas基础使用(七):绘制图像

简言 学习canvas如何绘制图片或视频。 绘制图像 给定一个图像,一般使用drawImage()方法绘制。 drawImage 绘制图像 Canvas 2D API 中的 CanvasRenderingContext2D.drawImage() 方法提供了多种在画布(Canvas)上绘制图像的方式。 语法&…

租用境外服务器,越南服务器的优势有哪些

自从中国加入世界贸易组织之后,国内经济增加速度非常快,同时越来越多的人选择去东南亚国家发展,因为当地的中国人很多,所以中国企业在当地面临着更小的文化差异。东南亚地区也是最新的经济体,互联网正处于蓬勃发展的阶…

docker-compose部署RabbitMQ(一步到位)

docker-compose如下 version: 3.1 services:rabbitmq:restart: alwaysimage: rabbitmq:managementcontainer_name: rabbitmqhostname: rabbitports:- 5672:5672- 15672:15672environment:TZ: Asia/ShanghaiRABBITMQ_DEFAULT_USER: rabbitRABBITMQ_DEFAULT_PASS: 123456volumes…

(弟弟14)递归•按顺序打印一个整数的每一位

这里是目录哦 题目代码运行截图递归思路递归停止条件如何实现“按顺序”悟了✨加油&#x1f389; 题目 按顺序打印一个整数的每一位。 代码 #include<stdio.h> void Print(int n) {if (n > 9)//递归停止条件{Print(n / 10);//不断趋近递归停止条件}printf("%d…

如何在Linux通过docker搭建Plik文件系统并实现无公网IP管理内网文件

文章目录 1. Docker部署Plik2. 本地访问Plik3. Linux安装Cpolar4. 配置Plik公网地址5. 远程访问Plik6. 固定Plik公网地址7. 固定地址访问Plik 本文介绍如何使用Linux docker方式快速安装Plik并且结合Cpolar内网穿透工具实现远程访问&#xff0c;实现随时随地在任意设备上传或者…

宝塔面板部署腾讯云的域名

一、腾讯云&#xff0c;搜索我的证书&#xff0c;点击打开如图所示&#xff0c;点击下砸 二、点击宝塔的证书&#xff0c;然后下载到桌面 三、解压 四、打开宝塔&#xff0c;网站》自己的项目列表中要绑定的ssl 五、对应的文件内容复制进去&#xff0c;保存并启用证书 六、有了…

SCI 四区(JEI)投稿到录用过程中的经历和心得体会

计算机视觉领域中&#xff0c;包含目标检测、三维重建、语义分割、图像分类等分支。其中&#xff0c;目标检测分支最卷&#xff0c;你知道的&#xff0c;没有背景和资源&#xff0c;发一篇SCI属实不易。本篇博客详细介绍本人投稿到录用过程中的经历和心得。 目录 1. 硬件资源落…

docker服务无法启动

背景&#xff1a;断电重启经常会导致磁盘io错误&#xff0c;甚至出现磁盘坏块 这时可以使用xfs_repair来修复磁盘&#xff0c;但是修复过程可能会导致部分数据丢失 xfs_repair -f -L /dev/sdc问题一&#xff1a; Apr 15 19:27:15 Centos7.6 systemd[1]: Unit docker.service e…

【Linux C | 多线程编程】线程同步 | 互斥量(互斥锁)介绍和使用

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 本文未经允许…

vmware esxi6.0安装配置操作

系统安装及配置 在服务器上安装ESXI 6.0 提示是否继续安装 如果不想安装,按ESC后再按F11即可,稍后电脑会重启. 继续安装,则按回车键 按F11同意声明继续 选择将EXSI 安装到哪个硬盘上,我这里使用的是虚拟机,所以只有这一个选项 选择默认键盘布局,默认的美国键盘即可 设置root…

每日一题---OJ题: 有效的括号

片头 嗨! 小伙伴们,大家好! 我们又见面啦! 今天我们来一起尝试一下这道题目---有效的括号,准备好了吗? 我们开始咯! 说实话,我刚开始做这道题的时候也是一脸懵,怎么进行括号匹配呢? 别慌,我们一起画个图,分析分析括号匹配的过程~ 如下图所示,上方表示一个字符串数组,存放不…

hadoop最新详细版安装教程 2024 最新版

文章目录 hadoop安装教程 2024最新版提前准备工作用户配置安装 SSH Server免密登录设置编辑 SSH server 配置文件配置Java环境查看java 版本验证 环境变量设置安装Hadoop下载hadoop解压hadoop查看hadoop 版本hadoop 配置编辑编辑配置文件core-site.xml编辑配置文件hdfs-site.xm…

gma 2 用户文档(pdf版)更新计划

随着 gma 2 整体构建完成&#xff0c;下一步继续针对库内所有功能完成一个用户指南&#xff08;非网站&#xff09;。相较于上次更新用户文档pdf版&#xff0c;已经过去了大半年。当然&#xff0c;PDF 版比网站上内容更丰富&#xff0c;也更新&#xff08;文档基于 gma 2.0.9a2…

Spring Cloud Gateway详细介绍以及实现动态路由

一. 简介 Spring Cloud Gateway This project provides a libraries for building an API Gateway on top of Spring WebFlux or Spring WebMVC. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to …

【读书笔记】自动驾驶与机器人中的SLAM技术——高翔

文章会对本书第五章节及以后章节进行总结概括。每日更新一部分。一起读书吧。 第五章——基础点云处理 重点&#xff1a;点云的相邻关系是许多算法的基础 5.1 激光雷达传感器与点云的数学模型 5.1.1激光雷达传感器的数学模型 雷达有两种&#xff1a;机械旋转式激光雷达&…

018——红外遥控模块驱动开发(基于HS0038和I.MX6uLL)

目录 一、 模块介绍 1.1 简介 1.2 协议 二、 驱动代码 三、 应用代码 四、 实验 五、 程序优化 一、 模块介绍 1.1 简介 红外遥控被广泛应用于家用电器、工业控制和智能仪器系统中&#xff0c;像我们熟知的有电视机盒子遥控器、空调遥控器。红外遥控器系统分为发送端和…

RISCV指令集体系简读之RV32M

RV32M向RV32I中添加了整数乘法和除法指令&#xff1b; RV32M具有有符号和无符号整数的除法指令&#xff1a;divide(div)和divide unsigned(divu)&#xff0c;它们将 商放入目标寄存器。在少数情况下&#xff0c;程序员需要余数而不是商&#xff0c;因此RV32M提供 remainder(rem…

46.HarmonyOS鸿蒙系统 App(ArkUI)网格布局

Grid(){GridItem(){Button(按钮1).fontSize(28)}.backgroundColor(Color.Blue)GridItem(){Text(数学).fontSize(28)}.backgroundColor(Color.Yellow)GridItem(){Text(语文).fontSize(28)}.backgroundColor(Color.Green)GridItem(){Text(英语).fontSize(28)}.backgroundColor(Co…

结构型模式--3.组合模式【草帽大船团】

1. 好大一棵树 路飞在德雷斯罗萨打败多弗朗明哥之后&#xff0c;一些被路飞解救的海贼团自愿加入路飞麾下&#xff0c;自此组成了草帽大船团&#xff0c;旗下有7为船长&#xff0c;分别是&#xff1a; 俊美海贼团75人 巴托俱乐部56人 八宝水军1000人 艾迪欧海贼团4人 咚塔塔海…