0%

【C#】隐式转换与显式转换,装箱与拆箱

隐式转换(Implicit):系统默认的、不需要加以声明就可以进行的转换。如 float转换为double类型。 显式转换(Explicit):利用强制类型转换运算符进行转换。如(int)a,a.ToString(),Convert.ToInt32(a)等等。

:存放值类型的内存

:存放引用类型的内存

装箱

装箱:跟据值类型的值,在上创建一个完整的引用类型对象,并返回对象的引用,是一种隐式转换装箱的意义:将值类型转化为引用类型(如object)来进行统一的操作(如作为函数的参数)与统一的存储(object[])。 装箱示例:

1
2
3
int i=3;
object oi=null;
oi=i;//装箱

装箱本质:装箱的本质就是在堆上创建了引用类型的副本,新创建的引用类型和原来的值类型相互独立

拆箱

拆箱:将装箱后的对象转换回值类型的过程,是一种显式转换。 如:

1
2
3
int i=3;
object oi=i;//装箱
int j=(int)oi;//拆箱

装箱与拆箱的应用举例

将各种类型的元素装箱为Object类型,然后创建一个Object数组一并包括之:

1
2
3
4
5
6
7
8
9
10
Object[] array=new Object[3];//创建包括三个元素的Object数组array
array[0]=new string[3];//第一个元素赋值为一个包含三个元素的字符串型数组
array[1]=3;//第二个元素赋值为一个整形数据“3”
array[2]=new Dog();//第三个元素赋值为Dog类的新对象
//导入数据,注意这里是隐式转换

string[] a=(string[])array[0];
int b=(int)array[1];
Dog dog=(Dog)array[2];
//导出数据,注意这里是显式转换