首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 请用通俗点讲解下C#中装箱拆箱概念,不太理解啊! [已结贴,结贴人:aspnet30]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • aspnet30
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-08-23 13:47:39 楼主
    请用通俗点讲解下C#中装箱拆箱概念,不太理解啊!

    谢谢
    40  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • caicai_45
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-23 14:09:531楼 得分:8
    int a = 3;
    object c = a;//装箱

    int b = (int)c;//拆箱

    代码形式上就是这样的。
    从原理上来说,是值类型和引用类型的内存分配不一样。
    int 这样的值类型可以说是没有指针的,就是在栈上开辟一段空间,把值放进去。
    object 这样的引用类型,是在栈上分配指针,指向堆中的一段内存,这段内存才是真正的数据。


    比如一个int变成 object 的话,就需要在在堆上创建一段内存空间,把int值存入,然后在栈上存入这个堆的地址
    一个object变为int,反过来,需要先从堆中读取数据,然后在栈上存入这个数值。

    所以装箱和拆箱操作过于频繁,会导致频繁的在堆栈上的操作,浪费CPU,浪费内存。

    泛型的集合类出现,基本解决了这样的问题,基本不需要类型转化,对应的,装箱和拆箱也大规模的减少。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • LQknife
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-23 14:14:392楼 得分:8
    用.net框架程序集设置书里的一个例子来说说
    ArrayList.Add(object obj);
    接受一个object类型的参数 现在你传一个int类型的参数比如是 i 进去
    可是这个方法接受的是一个引用类型的object你传进去的是一个值类型的 i
    为了达到类型匹配,.net就通过一种叫做装箱的机制来处理这样的问题
    就是说你必须把 i 这个参数给我包装一下不然我不认,怎么包装就是装箱了
    不是太形象 o(∩_∩)o...哈哈
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yagebu1983
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-23 14:19:233楼 得分:8
    就是值类型与引用类型的相互转换!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yagebu1983
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-23 14:20:534楼 得分:8
    值类型---》引用类型  是装箱
    引用类型----》值类型  是拆箱
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • No4000
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-23 14:39:185楼 得分:8
    值类型转换类类型->装箱 object obj = (object)其他任何值类型
    拆箱是把类类型即引用类型,转换为值类型,但引用类型转换值类型的格式要正确.如:int i = (int)引用类型
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved