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.值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值