值类型 引用类型

◇◆丶佛笑我妖孽 提交于 2020-01-25 02:11:50

值类型和引用类型最大的区别是内存分配的差异

Stack 栈:线程栈,由操作系统管理,存放值类型,引用类型变量(引用对象在托管堆上的地址)。一个线程包含一个线程栈,对象作用域结束后清理,效率高。

GC Heap 托管堆:存放引用类型,分配的对象由GC负责管理和释放,基于进程。

值类型一直存储在栈上吗?所有的引用类型都存储在托管堆上吗?

1.单独的值类型变量,存储在栈上面;

2.值类型作为class的某个字段,会随着引用类型存储在托管堆上,作为引用类型的一部分;

3.引用类型总是存储在托管堆上,但是引用类型变量即(引用类型对象在托管堆上的地址)是存储在栈上。

结构和类的区别

结构体是值类型,类是引用类型。

1.结构体不支持自定义无参构造函数,自定义构造函数只能带有参数,要保留默认无参构造函数,不支持析构函数,C#中不能有protected修饰符,不支持继承,成员变量不能定义初始值;

2.class支持抽象,struct不支持抽象;

当一个类型仅仅是原始数据的集合,而不需要复杂的操作时,就应该设计为struct,否则就应该设计为一个class

out和ref区别:ref需要初始化。

看到一篇文章写的巨好:https://www.cnblogs.com/anding/p/5229756.html

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!