欢迎来到天天文库
浏览记录
ID:38189699
大小:32.00 KB
页数:3页
时间:2019-05-24
《C#语言装箱和拆箱》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C#语言类型系统提出的1一个核心概念装箱(boxing)和拆箱(unboxing)装箱和拆箱机制使得在C#类型系统中任何值类型引用类型和object对象类型之间进行转换我们称这种转化为绑定连接简单地说有了装箱和拆箱的概念对任何类型的值来说最终我们都可以看作是object类型4.3.1装箱转换装箱转换是指将一个值类型隐式地转换成一个object类型或者把这个值类型转换成一个被该值类型应用的接口类型interface-type把一个值类型的值装箱也就是创建一个object实例并将这个值复制给这个object比如inti=
2、10;objectobj=i;用下图可以表示装箱的过程:我们也可以用显式的方法来进行装箱操作inti=10;objectobj=object(i);我们可以假想存在一个boxing类型其声明如下classT_Box{Tvalue;T_Box(Tt){value=t;}//该类型的构造函数}这里T表示将要装箱的值的类型它可以是intcharenum等等现在我们要将类型为T的值v装箱其执行过程为执行newT_Box(v)将其返回结果的实例作为对象类型的值那么下面的语句inti=10;objectobj=i;等价于inti
3、=10;objectobj=newint_Box(i);//将i装箱成对象obj我们看一下下面的程序程序清单4-4usingSystemclassTest{publicstaticvoidMain(){inti=10;objectobj=i;//对象类型栈堆ii装箱后inti=10objobjectobj=i10int10if(objisint){Console.Write("Thevalueofiisboxing!");}i=20;//改变i的值Console.WriteLine("int:i={0}",i);Co
4、nsole.WriteLine("object:obj={0}",obj);}}输出结果为Thevalueofiisboxing!int:i=20;object:obj=10;这就证明了被装箱的类型的值是作为一个拷贝赋给对象的4.3.2拆箱转换和装箱转换正好相反拆箱转换是指将一个对象类型显式地转换成一个值类型或是将一个接口类型显式地转换成一个执行该接口的值类型拆箱的过程分为两步首先检查这个对象实例看它是否为给定的值类型的装箱值然后把这个实例的值拷贝给值类型的变量我们举个例子来看看将一个对象拆箱的过程inti=10;o
5、bjectobj=i;intj=(int)obj;这个过程用图来表示就是:可以看出拆箱过程正好是装箱过程的逆过程必须注意装箱转换和拆箱转换必须遵循类型兼容原则。装箱和拆箱使我们可以把一个值类型当作一个引用类型来看待装箱转换是指将一个值类型隐式地转换成一个object类型拆箱转换是指将一个object类型显式地转换成一个值类型它们互为逆过程。
此文档下载收益归作者所有