C#中box和unbox操作隐式的,如果你用过ArrayList(其他任何容器)装载ValueType(int, long...),那么你一定用过box/unbox :),用ILDasm检查一下就知道了。
它的好处吗,就是把ValueType和ReferenceType统一在了以Object为核心的类库结构的领导下... 处理自然就方便多了。
它的好处吗,就是把ValueType和ReferenceType统一在了以Object为核心的类库结构的领导下... 处理自然就方便多了。
调试欢乐多
例如:
int n = 1;
object box = n;
n = box;//错误:无法将类型object隐式转换为int
你应该:
int n = 1;
object box = n;//装箱
n = (int)box;//拆箱,ok
http://www.csdn.net/develop/read_article.asp?id=11685
首先,(前提知识:)
C#中有两种数据类型: 值类型和引用类型.
C#中存储数据的时候有两个地方: 栈Stack和堆heap. 值类型放在Stack, 引用类型放在heap. (涉及到Garbage Collection)
C#是一个强类型语言,(检查十分严格)
C#是一个面向对象的语言.(所有的东西都可以看作一个对象)那么如何把这些统一起来呢?
Boxing装箱 and Unboxing拆箱 Boxing:将一个值类型隐式的转换成一个Object类型
值类型---->引用类型 Stack------->堆
说明: 这个是隐式转换.比如:
int i=5; (值类型)
String strBoxing = i.ToString(); (注意这里的装箱)
UnBoxing: 将一个Object类型显式转换成一个值类型.当然,也可以是将一个接口类型到相关值类型转换
引用类型--->值类型 heap------->Stack
注意: 必须是显式. Why? 难道你不觉得这很危险???:) 当然有必要问一声Are You Sure?比较深层次的俺就解释不出来了.