- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
什么是装箱和拆箱?
时间:2009-03-02 作者:匿名 编辑:hawk 点击: [评论]
??? 装箱和拆箱:任何值类型、引用类型可以和object(对象)类型之间进行转换。装箱转换是指将一个值类型隐式或显式地转换成一个object类型,或者把这个值类型转换成一个被该值类型应用的接口类型(interface-type)。把一个值类型的值装箱,就是创建一个object实例并将这个值复制给这个object,装箱后的object对象中的数据位于堆中,堆中的地址在栈中。被装箱的类型的值是作为一个拷贝赋给对象的。如:int i = 10;object obj = i; //隐式装箱object obj = object(i); //显式装箱if(obj is int) //int?????? Console.WriteLine(“OK”);
Console.WriteLine(obj.GetType()); //System.Int32有两种方式来查看包装以后的引用对象中包装的原始数据的类型。要判断原始类型是否是某个给定的原子类型,用is;如果要返回一个字符串,可以用object类的GetType方法。
?
拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口地值类型。注意装箱操作可以隐式进行但拆箱操作必须是显式的。拆箱过程分成两步:首先,检查这个对象实例,看它是否为给定的值类型的装箱值。然后,把这个实例的值拷贝给值类型的变量。比如:int i = 10;object obj = i;int j = (int)obj;有两种方式来查看包装以后的引用对象中包装的原始数据的类型。要判断原始类型是否是某个给定的原子类型,用is;如果要返回一个字符串,可以用object类的GetType方法。
?
拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口地值类型。注意装箱操作可以隐式进行但拆箱操作必须是显式的。拆箱过程分成两步:首先,检查这个对象实例,看它是否为给定的值类型的装箱值。然后,把这个实例的值拷贝给值类型的变量。比如:int i = 10;object obj = i;int j = (int)obj;
?
?????? 装箱(boxing)和拆箱(unboxing)是.NET提出得新概念!????? .NET的所有类型都是由基类System.Object继承过来的,包括最常用的基础类型:int, byte, short,bool等等,就是说所有的事物都是对象。如果申明这些类型的时候都在堆(HEAP)中分配内存,会造成极低的效率! ????? .NET如何解决这个问题得了?正是通过将类型分成值型(value)和引用型(regerencetype),C#中定义的值类型包括原类型(Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、 Decimal)、枚举(enum)、结构(struct),引用类型包括:类、数组、接口、委托、字符串等。????? 值型就是在栈中分配内存,在申明的同时就初始化,以确保数据不为NULL;????? 引用型是在堆中分配内存,初始化为null,引用型是需要GARBAGE COLLECTION来回收内存的,值型不用,超出了作用范围,系统就会自动释放!
????? 下面就来说装箱和拆箱的定义!????? 装箱就是隐式的将一个值型转换为引用型对象。比如:??????????????? int i=0;??????????????? Syste.Object obj=i; ????? 这个过程就是装箱!就是将i装箱!
????? 拆箱就是将一个引用型对象转换成任意值型!比如:?????????????? int i=0;?????????????? System.Object obj=i;?????????????? int j=(int)obj;????? 这个过程前2句是将i装箱,后一句是将obj拆箱!
????? 再写个代码,看看进行了几次装拆箱!???????????? int i=0;???????????? System.Object obj=i;???????????? Console.WriteLine(i+,+(int)obj);????? 其中共发生了3次装箱和一次拆箱!第一次是将i装箱,第2次是输出的时候将i转换成string类型,而string类型为引用类型,即又是装箱,第三次装箱就是(int)obj的转换成string类型,装箱!拆箱就是(int)obj,将obj拆箱!
?
?
1、????
您可能关注的文档
- C#.NET程序设计案例教程 教学课件 作者 杨东霞 7模块七.ppt
- C#.NET程序设计案例教程 教学课件 作者 杨东霞 8模块八.ppt
- C#.NET程序设计案例教程 教学课件 作者 杨东霞 9模块九.ppt
- AutoCAD2012建筑绘图及三维建模 教学课件 作者 高丽燕、莫正波第六期土建评分标准及答案 (土木与建筑类)CAD技能等级考试一级试题评分标准.doc
- AutoCAD2012建筑绘图及三维建模 教学课件 作者 高丽燕、莫正波第六期土建评分标准及答案 土建二级第六期参考评分标准.doc
- AutoCAD2012建筑绘图及三维建模 教学课件 作者 高丽燕、莫正波工业三级评分标准 工业产品CAD技能三级第6期试题及其评分标准 20110518.doc
- AutoCAD2012中文版实例教程 第2版 教学大纲作者 杨静 余妹兰 大纲.doc
- AutoCAD2012中文版室内设计实例教程 第2版 教学大纲 作者 张宁 李文英 大纲.doc
- AutoCAD2013实用教程 教学课件 作者 郝坤孝吕安吉季阳萍 编著 第1章 AutoCAD2013的基础知识.ppt
- C#编程和.NET框架 教学课件 作者 崔建江 第2章 使用控件创建Windows窗体程序 NO2.ppt
文档评论(0)