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
特别推荐:刘铁猛老师视频
见上述链接
个人学习总结,如果有误,多谢下方评论可以指出
来源:CSDN
作者:chasinghope
链接:https://blog.csdn.net/chasinghope/article/details/104156502