关于装箱和取消装箱的一些概念上的问题

离子漂浮物 2008-11-24 09:38:09
SDK对装拆箱的描述:

装箱和取消装箱都是需要大量运算的过程。对值类型进行装箱时,必须创建一个全新的对象。此操作所需时间可比赋值操作长 20 倍。取消装箱时,强制转换过程所需时间可达赋值操作的四倍。

-----------------

目前我的理解是装拆箱概念只是针对值类型,而自定义类不存在什么装拆箱操作。是不是可以这么理解呢。
类似string.format的第二个以上的参数传递算不算装箱呢。
类似:
int x=100;
object a=x;
return a.ToString()


最后一行不算是拆箱吧,嗯对于拆箱来说这样的操作是不是更快一些呢?

刚刚在看别人的贴子时,突然发现,好象我对这个装拆箱操作理解有点问题,所以提出来,有知道的人帮我指点一下。
...全文
184 18 打赏 收藏 举报
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
LAMP人 2008-11-25
class a{}

a tmp=new a();
object obj=a;//这个算不算装箱?
a tmpb=(a)obj;//这算不算拆箱呢?


不算。
  • 打赏
  • 举报
回复
pgameli 2008-11-25
[Quote=引用 5 楼 amandag 的回复:]
装箱是值类型隐式地转换为引用类型

拆箱是引用类型显式地转换为值类型

楼主最后的代码
return a.ToString()
==
引用类型(object)转换为引用类型(string),当然不是拆箱
[/Quote]

这个说的好
  • 打赏
  • 举报
回复
hztltgg 2008-11-25
引用类型转引用类型就不算是装拆箱吗?
是的,装箱拆箱的概念是值类型到引用类型和引用类型到值类型的转换才发生。
  • 打赏
  • 举报
回复
离子漂浮物 2008-11-25
[Quote=引用 5 楼 amandag 的回复:]
装箱是值类型隐式地转换为引用类型

拆箱是引用类型显式地转换为值类型

楼主最后的代码
return a.ToString()
==
引用类型(object)转换为引用类型(string),当然不是拆箱
[/Quote]


引用类型转引用类型就不算是装拆箱吗?
如:

class a{}

a tmp=new a();
object obj=a;//这个算不算装箱?
a tmpb=(a)obj;//这算不算拆箱呢?

  • 打赏
  • 举报
回复
tinghai_xu 2008-11-25
装箱:值类型->引用类型,数据需要从Stack复制到Heap
拆箱:引用类型->值类型,数据要从Heap复制到Stack
装拆箱的消耗多数还是在内存的分配和数据移动上,以上只是我的理解哈,别见笑。
  • 打赏
  • 举报
回复
kfps8kfps8 2008-11-25
[Quote=引用 5 楼 amandag 的回复:]
装箱是值类型隐式地转换为引用类型

拆箱是引用类型显式地转换为值类型

楼主最后的代码
return a.ToString()
==
引用类型(object)转换为引用类型(string),当然不是拆箱
[/Quote]
学习了...
  • 打赏
  • 举报
回复
啊兵 2008-11-25
装箱是值类型隐式地转换为引用类型

拆箱是引用类型显式地转换为值类型


今天和楼主一起学习了。。。。。。
  • 打赏
  • 举报
回复
jiang_jiajia10 2008-11-25
[Quote=引用 5 楼 amandag 的回复:]
装箱是值类型隐式地转换为引用类型

拆箱是引用类型显式地转换为值类型

楼主最后的代码
return a.ToString()
==
引用类型(object)转换为引用类型(string),当然不是拆箱
[/Quote]
  • 打赏
  • 举报
回复
oec2003 2008-11-25
不能算是拆箱 string 也是引用类型
  • 打赏
  • 举报
回复
Mr-Jee 2008-11-24
我感觉LZ混淆了一些概念.
不过有这样的想法挺好,会对一些概念的理解加深印象
我看好你哦
  • 打赏
  • 举报
回复
chagel 2008-11-24
int x=100;
object a=x; //值类型 -> 引用类型:装箱
return a.ToString() //没有类型转换,非拆箱
int b = (int)a; //引用类型-> 值类型:拆箱
  • 打赏
  • 举报
回复
melon23 2008-11-24
不能算拆箱,string是引用类型,又不是值类型,何来拆箱?

  • 打赏
  • 举报
回复
amandag 2008-11-24
装箱是值类型隐式地转换为引用类型

拆箱是引用类型显式地转换为值类型

楼主最后的代码
return a.ToString()
==
引用类型(object)转换为引用类型(string),当然不是拆箱
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lonely7345 的回复:]
我觉得也算拆箱吧..

int i = 123;

object obj = i;//Boxing

if( obj is int )

int j = (int) obj;//Unboxing

http://blog.csdn.net/songxiaozhao/archive/2008/04/01/2235012.aspx
[/Quote]
同意,个人认为应该是拆箱
  • 打赏
  • 举报
回复
孤独侠客123 2008-11-24
我觉得也算拆箱吧..

int i = 123;

object obj = i;//Boxing

if( obj is int )

int j = (int) obj;//Unboxing

http://blog.csdn.net/songxiaozhao/archive/2008/04/01/2235012.aspx
  • 打赏
  • 举报
回复
wuyq11 2008-11-24
装箱和取消装箱使值类型能够被视为对象。对值类型装箱将把该值类型打包到 Object 引用类型的一个实例中。这使得值类型可以存储于垃圾回收堆中。取消装箱将从对象中提取值类型。。
int i = 123;
object o = (object)i; // boxing
然后,可以对对象 o 取消装箱并将其赋值给整型变量 i:
o = 123;
i = (int)o; // unboxing
引用对象也存在。
现在很少用了,主要用泛型
  • 打赏
  • 举报
回复
surewy 2008-11-24
mark
  • 打赏
  • 举报
回复
相关推荐
发帖
.NET社区

6.0w+

社区成员

.NET技术交流专区
社区管理员
  • ASP.NET
  • R小R
  • 喵叔哟
加入社区
帖子事件
创建了帖子
2008-11-24 09:38
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。