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

烂漫一生 提交于 2020-02-04 08:09:07

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
特别推荐:刘铁猛老师视频
见上述链接
个人学习总结,如果有误,多谢下方评论可以指出

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