C# 值类型与引用类型(详解)

C# 语言的类型系统

在这里插入图片描述

值类型与引用类型在内存中的分配

在这里插入图片描述
引用类型的变量存储着引用类型的实例在堆内存中的内存地址;
在这里插入图片描述
变量名表示(对应着)变量的值在内存中的存储位置;

值类型变量引用类型变量
一个值类型变量赋给另一个值类型变量时,将复制其包含的值引用类型变量的赋值只复制对象的引用,不复制对象本身
不能继承,所有值类型都是隐式密封的可以继承
均派生自 System.ValueType类,System.ValueType又继承自System.Object类派生自System.Object类
// 假设Test这个类(引用类型)或结构(值类型)中包含两个值类型字段a和b并且通过它的构造函数来获取a和b的值
Test t1 = new Test(1,2);
Test t2 = t1;

值类型图解:
在这里插入图片描述
引用类型图解:
在这里插入图片描述

装箱与拆箱


```csharp
int x = 100;
object obj;
obj = x;   // 装箱
int y = (int)obj;    // 拆箱
  • 装箱:
    把栈上的值类型的值封装成一个Object类型的实例放在堆上;

  • 拆箱:
    把堆上的Object类型的实例的值拆成目标数据类型存储在栈上;

Tips: 装箱和拆箱操作损失性能。

参考资料

https://www.bilibili.com/video/av1422127/?p=7&t=3333
特别推荐:刘铁猛老师视频
见上述链接
个人学习总结,如果有误,多谢下方评论可以指出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值