C#引用类型和值类型的适用场合和区别
作者:Mogul1 发布时间:2022-10-20 03:37:25
1.值类型
值类型包括:数值类型,结构体,bool型,用户定义的结构体,枚举,可空类型。
值类型的变量直接存储数据,分配在托管栈中。变量会在创建它们的方法返回时自动释放。
所有的值类型都是密封(seal)的,所以无法派生出新的值类型。
2.引用类型
引用类型包括:数组,用户定义的类、接口、委托,object,字符串,null类型,类。
引用类型的变量持有的是数据的引用,数据存储在数据堆,分配在托管堆中,变量并不会在创建它们的方法结束时释放内存,它们所占用的内存会被CLR中的垃圾回收机制释放。
CLR常用简写词语,CLR是公共语言运行库(Common Language Runtime)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集等),并保证应用和底层操作系统之间必要的分离。
3.值类型与引用类型区别:
4.适用场合:
值类型在内存管理方面具有更好的效率,并且不支持多态,适合用做存储数据的载体;引用类型支持多态,适合用于定义应用程序的行为。
引用类型可以派生出新的类型,而值类型不能,因为所有的值类型都是密封的。
引用类型可包含null值,值类型不能(可空类型功能允许将null赋给值类型,如int a=null);
引用类型变量的赋值只复制对对象的引用,而不复制对象本身。而将一个值类型变量赋给另一个值类型变量时,将复制包含的值
5.装箱和拆箱
1)装箱就是将一个值类型转换成等值的引用类型
在堆上为新生成的对象(该对象包含数据,对象本身没有名称)分配内存。
将堆栈上值类型变量的值拷贝到堆上的对象中。
将堆上创建的对象的地址返回给引用类型变量(从程序员角度看,这个变量的名称就好像堆上对象的名称一样)。
2)拆箱就是将一个引用类型转换成等值的值类型
将引用类型变量堆上的值拷贝到栈上面。
来源:https://blog.csdn.net/Mogul1/article/details/81191566


猜你喜欢
- 在网上看到一个进度条效果图,非常美观,如下:进行效果分解:1.渐变色,看起来颜色变化并不复杂,使用LinearGradient应该可以实现。
- 虽然文章的标题是词法分析,但首先还是要从编译原理说开来。编译原理应该很多人都听说过,虽然不一定会有多么了解。简单的说,编译原理就是研究如何进
- 加密配置文件的SQL账号密码一般项目的配置文件里的信息都是明文的,导致有时候比较敏感的信息也直接暴露得超级明显,比如SQL的链接 账号 密码
- 介绍Java中介者模式(Mediator Pattern)是一种行为设计模式,它可以降低多个对象之间的耦合性,通过一个中介者对象来协调这些对
- GC简介何为GCGC(Garbage Collection)称之为垃圾回收,是对内存中的垃圾对象,采用一定的算法进行内存回收的一个动作。比方
- Java中代码的加载顺序所能了解的知识点类的依赖关系static代码块的加载时间继承类中构造器的隐式调用非static的成员变量初始化时间m
- 本文提供了基于MD5加密16位和32位的方法,具体内容如下import java.io.IOException;import java.ma
- 效果如下:BitmapShader 的简单介绍关于 Shader是什么,Shader的种类有哪几种以及如何使用不属于本文范畴,对这方面不是很
- 定义:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。类型:行为类模式类图:例子:例如
- 以下是代码:package cn.study.concurrency.ch11;/** * 锁分段 * @author xiaof * */
- 引言在实际应用场景中,我们封装一个学生的类,这个类用于封装学生的日常行为,如:上学、吃饭、上课等。然而,在疫情期间,学生上学时入校、吃饭时进
- 前言在逛网易新闻时,发现列表中的广告在你滑动的时候会有一个3D旋转的交互引你的注意,不得不说这些产品为了让用户看广告花样百出,那么今天我们就
- 看到有人在问如何实现淘宝商品详情页效果,献上效果图大致梳理一下思路,这里不提供源码状态栏透明使用开源库StatusBarCompat,为了兼
- 在[高并发Java 二] 多线程基础中,我们已经初步提到了基本的线程同步操作。这次要提到的是在并发包中的同步控制工具。1. 各种同步控制工具
- 为了解放程序员的双手,减少重复性代码的编写,推荐使用插件:mybatis-plus-generator 进行代码自动生成。下面我将详细介绍通
- 本文实例为大家分享了opencv检测直线之投影法的具体代码,供大家参考,具体内容如下以下是我对投影法的一点认识和实验:投影法就是数字图像在某
- 一、电量统计模块概述耗电信息在设置 -> 电量中能够非常直观的看到。注意,Android 所有功耗统计都是通过代码估算,没有集成电路参
- 首先给大家来讲一个我们遇到的一个奇怪的问题:1.我的一个springboot项目,用mvn install打包成jar,换一台有jdk的机器
- 1.返回String“长度”方法你如何确定给定String的长度?java提供了一种称为“length()”的方法。将它用于您需要查找Str
- 质数又称素数。一个大于1的自然数,如果除了1和它自身外,不能被其他自然数整除的数;否则称为合数。根据算术基本定理,每一个比1大的整数,要么本