值与引用的相关问题
一、如何判断是值类型和引用类型?
F12 进到类型的内部去查看
- 是 class 就是引用
- 是 struct 就是值
二、语句块
- 命名空间
- 类、接口、结构体
- 函数、属性、索引器、运算符重载等(类、接口、结构体)
- 条件分支、循环
问题:
- 我们的逻辑代码写在哪里? 函数、条件分支、循环-中底层语句块中
- 我们的变量可以申明在哪里? 上、中、底都能申明变量
- 上层语句块中:成员变量
- 中、底层语句块中:临时变量
总结:
- 上层语句块:类、结构体
- 中层语句块:函数
- 底层的语句块: 条件分支 循环等
三、变量的生命周期
编程时大部分都是 临时变量 在中底层申明的临时变量(函数、条件分支、循环语句块等) 语句块执行结束 没有被记录的对象将被回收或变成垃圾
- 值类型:被系统自动回收
- 引用类型:栈上用于存地址的房间被系统自动回收,堆中具体内容变成垃圾,待下次 GC 回收
想要不被回收或者不变垃圾,必须将其记录下来 如何记录? 在更高层级记录或者,使用静态全局变量记录
四、结构体中的值和引用
结构体本身是值类型 前提:该结构体没有做为其它类的成员
- 在结构体中的值,栈中存储值具体的内容
- 在结构体中的引用,堆中存储引用具体的内容
引用类型始终存储在堆中,真正通过结构体使用其中引用类型时只是顺藤摸瓜
五、类中的值和引用
类本身是引用类型
- 在类中的值,堆中存储具体的值
- 在类中的引用,堆中存储具体的值
值类型跟着大哥走,引用类型一根筋
六、结构体继承接口
利用里氏替换原下,用接口容器装载结构体存在装箱拆箱