美文网首页
深入理解C#的装箱和拆箱

深入理解C#的装箱和拆箱

作者: ArimaKisho | 来源:发表于2017-08-14 15:37 被阅读225次

装箱和拆箱是值类型和引用类型之间相互转换要进行的操作。

1.装箱是值类型转化成引用类型时发生的。

2.拆箱是引用类型转化成值类型时发生的。

先通过一个例子看看装箱会发生什么:

object obj = 1;

这行语句将整型常量1赋给object的变量obj;众所周知常量1是值类型,值类型是要放到栈上的,而object是引用类型,它需要放在堆上;要把值类型放在堆上就需要执行一次装箱操作。

这行语句的IL代码如下:

.locals init (

[0]objectobjValue

)//以上三行IL表示声明object类型的名称为objValue的局部变量

IL_0000: nop

IL_0001: ldc.i4.s 9//表示将整型数9放到栈顶

IL_0003: box [mscorlib]System.Int32//执行IL box指令,在内存堆中申请System.Int32类型需要的堆空间

IL_0008: stloc.0//弹出堆栈上的变量,将它存储到索引为0的局部变量中

拆箱的例子:

object  objValue = 4;

int value = (int)objValue;

.locals init (

[0]objectobjValue,

[1] int32'value'

)//上面IL声明两个局部变量object类型的objValue和int32类型的value变量

IL_0000: nop

IL_0001: ldc.i4.4//将整型数字4压入栈

IL_0002: box [mscorlib]System.Int32//执行IL box指令,在内存堆中申请System.Int32类型需要的堆空间

IL_0007: stloc.0//弹出堆栈上的变量,将它存储到索引为0的局部变量中

IL_0008: ldloc.0//将索引为0的局部变量(即objValue变量)压入栈

IL_0009: unbox.any [mscorlib]System.Int32//执行IL 拆箱指令unbox.any 将引用类型object转换成System.Int32类型

IL_000e: stloc.1//将栈上的数据存储到索引为1的局部变量即value

拆箱操作的执行过程和装箱操作过程正好相反,是将存储在堆上的引用类型值转换为值类型并给值类型变量。

装箱操作和拆箱操作是要额外耗费cpu和内存资源的,所以在c# 2.0之后引入了泛型来减少装箱操作和拆箱操作消耗。


装箱拆箱原理解释

相关文章

  • Unity笔试题

    1·描述一下C#中的装箱和拆箱,下面哪些地方会发生装箱或者拆箱? a) int a= 10; b) Object ...

  • 深入理解C#的装箱和拆箱

    装箱和拆箱是值类型和引用类型之间相互转换要进行的操作。 1.装箱是值类型转化成引用类型时发生的。 2.拆箱是引用类...

  • 深入理解C#的装箱和拆箱

    装箱和拆箱是值类型和引用类型之间相互转换是要执行的操作。 1. 装箱在值类型向引用类型转换时发生 2. 拆箱在引用...

  • 10.18学习总结

    今天学习完了c#语言基础,包括类型转换(Parse和To string),装箱与拆箱(值类型和引用类型) ,...

  • C# 装箱,拆箱,向上转型,向下转型

    c#中,数据类型分为值类型和引用类型,装箱和拆箱属于值类型和引用类型间的转换操作。 装箱:值类型向引用类...

  • 2018年9月6日.NET笔试面试题

    什么是装箱(boxing)和拆箱(unboxing)?C#中值类型和引用类型的最终基类都是Object类型(它本身...

  • Unity常见面试题(一)

    1. [C#语言基础]请简述拆箱和装箱。 答: 装箱操作: 值类型隐式转换为object类型或由此值类型实现的任何...

  • Java自动拆箱和装箱

    参考文章:深入剖析Java中的装箱和拆箱 一、什么是装箱/拆箱 在讲之前,得先提一下为什么两个概念:基本数据类型及...

  • Java自动装箱和拆箱,包装类缓存机制和JVM调节

    关于Java自动装箱和拆箱 基本数据(Primitive)类型的自动装箱(autoboxing)、拆箱(unbox...

  • Unity及C#优化

    1、C# (1)避免装箱拆箱; (2)避免高消耗API的频繁调用; 例如:FindObjectsOfType、Ca...

网友评论

      本文标题:深入理解C#的装箱和拆箱

      本文链接:https://www.haomeiwen.com/subject/toeurxtx.html