值类型

值类型:【微软:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/value-types】

1:首先了解堆和栈的区别

而言,栈中的新加数据项放在其他数据的顶部,移除时你也只能移除最顶部的数据(不能越位获取)。

而言,数据项位置没有固定的顺序。你可以以任何顺序插入和删除,因为他们没有“顶部”数据这一概念。

栈更快因为所有的空闲内存都是连续的,因此不需要对空闲内存块通过列表来维护。只是一个简单的指向当前栈顶的指针。编译器通常用一个专门的、快速的寄存器来实现。更重要的一点事是,随后的栈上操作通常集中在一个内存块的附近,这样的话有利于处理器的高速访问。(局部性原理)

我们经常说的数据结构堆栈,其实指的就是栈,它是一种先进后出的数据结构,从管理角度来讲,它是由操作系统分配管理的,也就是说它是规整的,内存的大小在申请之后不会发生变化。因此,它不会出现碎片化,并且读取速度非常的快。什么样的数据存放到栈里面呢?我们经常声明的局部变量,一些基本数据类型,比如int,double,short,char等,这些数据在声明的时候,内存的大小已经确定,它们会被存放到栈中。使用栈的好处是,我们不需要管理内存的释放,这些内存会由操作系统自动释放,比如我们运行的一些函数,当我们函数结束的时候,它内部的变量申请的内存空间就会被自动释放,非常方便。

相比于栈的固定大小,堆的分配非常自由,它是由程序员自己去分配的,比如程序员考虑到某些情况需要更多的内存,它就可以在堆上面申请一个足够大的内存。除此之外,内存的分配非常自由,它并不要求是连续的内存,只要有空间,都可以被拿来分配。不过这样就会导致产生很多碎片,不利于高速读取,因此堆的操作的速度要比栈慢很多。堆主要存放的是大小不固定的内存结构,因此,我们的数组和结构体经常被存放到堆上。对于全局变量我们也会放到堆上,因为它需要可以被任何地方访问,并且不能像栈一样被操作系统回收。

总结:简单来讲,栈相当于吃自助,我们只需要拿自己喜欢的食物尽情享受就好,我们不需要刷盘子,不需要准备食材,我们唯一要做的就是选择自己要吃的食物即可。而堆相当于我们在家自己做饭,我们需要自己准备食材,需要自己做菜,做完菜之后,我们还需要负责洗盘子,洗碗,这些就相当于堆的垃圾回收。堆和栈说白了就是内存的两种管理方式,栈很规整,可以自己释放内存,但是不够灵活,堆很灵活,但是有时候我们又会嫌弃自己管理内存的麻烦。可以说两者各有利弊,我们应根据实际情况做出选择。

2:值类型可以是以下种类之一

结构类型:用于封装数据和相关功能

结构类型是一种可封装数据和相关功能的值类型 ,使用 struct 关键字定义结构类型

枚举类型:由一组命名常数定义,表示一个选择或选择组合。

枚举类型 是由基础整型数值类型的一组命名常量定义的值类型 若要定义枚举类型,请使用 enum 关键字并指定枚举成员的名称

C# 提供以下内置值类型,也称为“简单类型”

整型数值类型[int]

浮点型数值类型[double]

bool

char

所有简单值都是结构类型,它们与其他结构类型的不同之处在于,它们允许特定的额外操作:

值元组是值类型,而不是简单类型。

3:引用类型

string

委托delegate 是一种可用于封装命名方法或匿名方法的引用类型。

record

接口

posted @ 2022-04-02 10:23  C#工控菜鸟  阅读(47)  评论(0编辑  收藏  举报