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

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;//不赋值,默认值是0int 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.mzph.cn/news/819261.shtml

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

相关文章

如何做信创测试

信创测试是一种系统化的方法,旨在评估和验证创意和创新项目的潜力和可行性。进行信创测试可以帮助企业在投入大量资源之前,对创意进行客观、科学的评估,以减少失败的风险并最大化成功的可能性。以下是一般性的信创测试步骤: 确定…

用 LLaMA-Factory 在魔搭微调千问

今天在魔搭上把千问调优跑通了,训练模型现在在 Mac 还不支持,需要用 N 卡才可以,只能弄个N 卡的机器,或者买个云服务器。魔搭可以用几十个小时,但是不太稳定,有的时候会自动停止。 注册账号 直接手机号注…

Docker:安装Redis,同时设置外网访问

step 1: 安装必要的一些系统工具   yum install -y yum-utils device-mapper-persistent-data lvm2 yum install -y libseccomp-devel Step 2: 添加软件源信息 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ​…

每天学习一个Linux命令之make

每天学习一个Linux命令之make 简介 在Linux系统中,make命令是一个非常有用的构建工具。它根据Makefile文件中指定的规则来构建项目。make命令可以极大地简化编译、链接和安装等任务。本文将详细介绍make命令的使用方法以及可用的选项。 基本用法 make命令的基本…

css的背景

一.css的背景: 通过css背景属性,可以给页面元素增加背景样式。 背景属性可以设置背景颜色,背景图片,背景平铺,背景图片位置,背景图像固定等。 3.1背景颜色 样式名称: background-color定义…

自然语言处理: 第二十七章LLM训练超参数

前言: LLM微调的超参大致有如下内容,在本文中,我们针对这些参数进行解释 training_arguments TrainingArguments(output_dir"./results",per_device_train_batch_size4,per_device_eval_batch_size4,gradient_accumulation_steps2,optim"adamw_8bi…

【无人机/平衡车/机器人】详解STM32+MPU6050姿态解算—卡尔曼滤波+四元数法+互补滤波(文末附3个算法源码)

效果: MPU6050姿态解算-卡尔曼滤波+四元数+互补滤波 目录 基础知识详解 欧拉角

对 SuperNeurons 的复现记录

文章目录 论文源码环境步骤数据集参考备忘 论文 [1801.04380] SuperNeurons: Dynamic GPU Memory Management for Training Deep Neural Networks 源码 GitHub - linnanwang/superneurons-release: this is the release repository of superneurons 环境 Ubuntu 22.04GeFo…

OpenCV基本图像处理操作(五)——图像数据操作

数据读取 cv2.IMREAD_COLOR:彩色图像cv2.IMREAD_GRAYSCALE:灰度图像 import cv2 #opencv读取的格式是BGR import matplotlib.pyplot as plt import numpy as np %matplotlib inline imgcv2.imread(cat.jpg)数据显示 #图像的显示,也可以创建多个窗口 c…

力扣练习题(2024/4/15)

1打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋…

数组以及稀疏矩阵的快速转置算法详细分析

一.数组: 1.数组的地址计算: 数组的地址计算比较简单,读者可以自行了解,在这里不再赘述; 2.特殊矩阵的压缩存储: 在这里我们主要说明稀疏矩阵的主要内容: (1)稀疏矩阵…

[重学Python]Day 2 Python经典案例简单习题6个

[重学Python]Day 2 Python经典案例简单习题6个 一、寻找水仙花数二、百钱百鸡三、CRAPS赌博游戏四、生成**斐波那契数列**的前20个数五、找出10000以内的**完美数**六、输出**100以内所有的素数** 项目链接:https://github.com/jackfrued/Python-100-Days 一、寻找…

J垃圾回收

J垃圾回收 1 概述2 方法区的回收3 如何判断对象可以回收3.1 引用计数法3.2 可达性分析法 4 常见的引用对象4.1 软引用4.2 弱引用4.3 虚引用4.4 终结器引用 5 垃圾回收算法5.1 垃圾回收算法的历史和分类5.2 垃圾回收算法的评价标准5.3 标记清除算法5.4 复制算法5.5 标记整理算法…

关于UAC标准音频数据传输端点的最大包长问题

1. 标准音频数据传输端点 标准音频数据传输端点(Standard AS Isochronous Audio Data Endpoint Descriptor) 是在音频流接口下,用来传输音频数据的端点。需要注意描述符结构中的两个字段:wMaxPacketSize + bInterval 。 (1) wMaxPacketSize:端点在某一时刻,发送/接收的…

sky08、09笔记常用组合逻辑电路

本节的目的是为了更好的预估delay。 1.1bit全加器 module fadd_1b( a, b, cin, s, cout ); input wire a,b,cin; output wire s,cout;wire p,g; assign p a|b;//propagate carry assign g a&b;//generate carry assign s a^b^cin; assign cout (p&cin)|g; endmodu…

使用Python脚本检测服务器信息并定时发送至管理员邮箱

在日常的系统管理工作中,监测服务器的资源占用情况至关重要,我们需要及时获得通知以便采取相应措施。我新装了一台UbuntuServer服务器,写了一个可以定期收集服务器的CPU、内存、网络和磁盘信息,并通过邮件将这些信息发送给管理员的…

github上的软件许可证是什么?如何合并本地的分支德语难学还是俄语更加难学?站在一个中国人的立场上,德语难学还是俄语更加难学?俄语跟德语有什么样的显著差别?

目录 github上的软件许可证是什么? 如何合并本地的分支 德语难学还是俄语更加难学? 站在一个中国人的立场上,德语难学还是俄语更加难学? 俄语跟德语有什么样的显著差别? github上的软件许可证是什么? …

经典问题解答(顺序表)

问题一:移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不…

DevOpsGPT:一个基于人工智能的软件开发自动化解决方案

DevOpsGPT是一个基于人工智能的软件开发自动化解决方案,旨在通过结合大型语言模型(LLM)和DevOps工具来提高软件开发的效率。它能够将自然语言的需求转化为可工作的软件,从而极大地简化了传统的软件开发流程1 24。DevOpsGPT的核心功能包括提高开发效率、缩短开发周期,并且无…

Mathtype安装

如何将MathType公式编辑器内嵌到WPS工具栏中 这一篇就够了 运行时错误‘53’:文件未找到:MathPage.WLL MathType嵌入到WPS mathtype与wps兼容吗 mathtype怎么加载到wps 2024最新Mathtype如何嵌入Word/WPS使用步骤技巧以及深度操作教程 如果还不行&…