C#装箱和拆箱(装箱和拆箱对应用程序性能的影响)
一、装箱和拆箱到底是什么?
装箱(box):把值类型对象转为引用类型的对象;
拆箱(unbox):把引用类型对象转为值类型的对象。
二、装箱和拆箱的实际运用
下面是我们常写的代码,那么在这个过程中,装箱和拆箱到底是怎么转换的呢?
int n = 2;
object obj = (object)n;//装箱,把数值类型int转换为引用类型object对象的。
int m = (int)obj;//拆箱,把引用类型的object转换为int类型。
我们可以看看C#代码被编译为中间语言IL,就很清楚装箱和拆箱的过程:
三、实际编码过程中到底哪些是装箱和拆箱呢?
1、引用类型之间不属于装箱和拆箱,装箱、拆箱必须是: 值类型→引用类型 或 引用类型→值类型。
Person p=new Student();//这个叫隐式类型转换,不叫装箱。
Student stu=(Student)p;//这个叫显示类型转换,不叫拆箱。
2、方法重载时,如果具有该类型的重载,那么就不叫拆箱或装箱。
int n=10; Console.WriteLine(n);//没有发生装箱,因为方法重载。
3、接口与值类型之间的装箱与拆箱。
int n = 2;
IComparable c = n;
int m = (int)c;
Console.WriteLine(m.ToString());
IComparable c = n;
int m = (int)c;
Console.WriteLine(m.ToString());
四、频繁装箱和拆箱会对程序性能造成什么影响?
频繁的拆箱和装箱会对系统性能造成什么影响?下面我们就从运行时间方面对其性能进行分析,