C# 基础 – 装箱 / 拆箱, 堆 / 栈

前言

有些概念可能你用不到, 但是懂也无妨.

 

装箱 / 拆箱

参考: C#装箱和拆箱(Boxing 和 UnBoxing)

通常讲到这些都跟性能有关. 

把值类型变成引用类型就叫装箱.

int number = 11;
object obj = number;

int 是值类型, 放入到 object 引用类型中.

拆箱就是反过来

int number = (int)obj;

被装箱过才能被拆箱.

上面这类代码通常会出现在你想写动态类型, 反射这类代码的时候. 肯定会扣性能的分数但是, 如果在意性能的话,可以退而求其次试试看使用泛型或者方法重载去表达动态的部分.

 

栈 / 堆

参考: C# 堆和栈的简述

stack 和 heap 讲的是内存使用. 代码运行的时候会把变量 (值类型) 都放进 stack 中. 它像弹匣, 变量像子弹那样被塞进去, 然后从入口被发出. 所以它是 first in last out, 或 last in first out 概念.

stack 的变量只会保留短暂的时期, 比如一个函数中的变量在函数运行完以后就被释放了 (闭包不算丫).

heap 就不同, 它是内存指针, 一个变量 (引用类型) 只保留了值得内存地址. heap 需要靠垃圾回收才能释放. 垃圾回收会在某个时候检查所有的内存地址, 那些没有被任何变量引用的就会被释放掉. obj.value = null; <-- 把变量设置成 null 就是断开引用的手法.

posted @ 2022-05-05 00:06  兴杰  阅读(172)  评论(0编辑  收藏  举报