C#入门(十)值类型和引用类型

前言

我们在程序中定义的变量,实际上是存储在内存中的,内存中专门有两个位置(堆和栈)来存放变量。一般来说,值类型存在栈当中,引用类型存在堆当中。栈中存储的值类型变量在超出其作用域后,所占内存被系统释放,对重的引用类型对象则是由一个叫做GC垃圾回收器,进行内存回收。
在这里插入图片描述
举个例子:
Class Program//Program为一个类
Program p1=new Program();//p1就是那个引用,要放在栈中,其p1的值就要放在堆当中了
GC.Collect()//强制GC垃圾回收,系统自动调用,我们不用管,学习的时候可以自己尝试一下,更加清楚了解GC垃圾回收机制

值类型

简单类型:(Sbyte,Byte,Short,Ushort,Int,Uint,Long,Ulong,Char,Float,Double,Bool,Decimal)
在这里插入图片描述
枚举(enum),自定义类型
enum 枚举名

枚举成员

每个枚举成员都被赋予一个底层整数类型,默认为int
在默认情况下,编译器把第一个成员赋值为0,之后的比前面的加1

结构(struct):程序员定义的数据类型,与类非常相似。
本质上和类的区别就是,类是引用类型,而他是值类型,且是密封的,不能派生。
struct 结构名


选用类还是结构呢?从三条分析:
在这里插入图片描述

引用类型

类,数组,接口,委托,字符串
在这里插入图片描述

值类型和引用类型的区别

1.值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。

2.值类型存取速度快,引用类型存取速度慢。

3.值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用

4.值类型继承自System.ValueType,System.ValueType继承自System.Object,引用类型继承自System.Object

5.栈的内存分配是自动释放;而堆在.NET中会有GC来释放

6.值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。

发布了17 篇原创文章 · 获赞 7 · 访问量 2271
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览