C#装箱和拆箱

1、装箱是将值类型转换为引用类型(或者转换为此值类型所实现的任何接口类型)的隐式转换,当 CLR 对值类型进行装箱时,会将该值包装到 System.Object 内部,再将后者存储在托管上。

1             int i = 123;
2             //值类型变成引用类型,装箱,隐式的
3             object obj = i;

2、拆箱是将引用类型转换为值类型(或接口类型到实现该接口类型的值类型)的显示转换 。

1             int i = 123;
2             //值类型变成引用类型,装箱,隐式的
3             object obj = i;
4             //将从引用类型中提取值类型,拆箱,显式的
5             int j = (int)obj;

 拆箱的操作包括:

    检查对象实例,以确保它是给定值类型的装箱值。

    将该值从实例复制到值类型变量中。

3、 .NET中,数据类型划分为值类型和引用(不等同于C++的指针)类型,与此对应,内存分配被分成了两种方式,一为栈,二为堆,注意:是托管堆。

  值类型只会在栈中分配。引用类型分配内存与托管堆。托管堆对应于垃圾回收。

原文地址:https://www.cnblogs.com/WebApp-DotNet/p/6209984.html