C#中值类型和和引用类型实质上是同源的,所以不但可以从值类型和引用类型之间进行转换,也可以在值类型和引用类型之间进行转换。,但是两者使用的内存类型不同,使他们的转换变得复杂。
1.装箱:
在C#中通常将值类型转换成引用类型叫做装箱。
C#中值类型装箱为引用类型的过程如下:
- 在托管堆中创建一个新的对象实例,并分配相应的内存。
- 将值类型变量值复制到对象实例中。
- 将对象实例地址压入堆栈中,并指向一个引用类型。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int mm = 50; //定义值类型变量 object nn = mm; //将值类型变量装箱到引用型类型汇总 Console.WriteLine("值为{0},装箱对象为{1}",nn,mm); mm = 100; //改变值 Console.WriteLine("值为{0},装箱对象为{1}", mm, nn); Console.ReadKey(); } } }
运行结果如下:
2.拆箱:
在C#中通常将引用类型转换成值类型叫做拆箱。C#中一个引用类型拆箱成一个值类型的流程如下:
- 检查该对象的实例是否是某个给定的值类型装箱后的值。
- 如果是则将值从实例中复制出来。
- 赋值给值类型变量。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int mm = 50; object nn = mm; Console.WriteLine("装箱:值为{0},装箱对象为{1}", mm, nn); int zz = (int)nn;//取消装箱=拆箱 Console.WriteLine("拆箱:装箱对象为{0},值为:{1}",nn , zz); Console.ReadKey(); } } }
时间: 2024-10-10 05:46:08