值类型 引用类型

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

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

猜你喜欢

转载自blog.csdn.net/l17768346260/article/details/103745903