貌似见过的拆箱操作的范例,都是将一个值类型装箱为object,然后对这个object做拆箱操作。
我想问下,能否直接对某个引用类型进行拆箱?
如果不能,那么貌似拆箱没有什么作用啊?比如,我能否将我的一个类CTest进行拆箱?要想能对这个类拆箱,应当怎么做?
分数不多,但是结贴很及时,最多三天必定结贴,谢谢大家的帮助。
我想问下,能否直接对某个引用类型进行拆箱?
如果不能,那么貌似拆箱没有什么作用啊?比如,我能否将我的一个类CTest进行拆箱?要想能对这个类拆箱,应当怎么做?
分数不多,但是结贴很及时,最多三天必定结贴,谢谢大家的帮助。
另外,拆箱要的box类型,不装箱也没有
引用类型分配在托管堆上,其生命周期又垃圾收集器控制。如果没有引用变量指向它,就会被释放。
值类型分配在堆栈上,生命周期由Scope(也就是{})控制。出了scope就会释放。那么有些函数或者容器的参数是引用类型,但是我们想传值类型进去怎么办呢?
这就有了装箱和拆箱。
装箱,将值类型copy到堆中。并返回引用。
拆箱,将装箱后的值类型再copy回到堆栈上。因此装箱只能应用到值类型上。而拆箱,只能应用到装箱后返回的引用上。
在msdn上用的术语是“取消装箱”。要在运行时成功取消装箱值类型,被取消装箱的项必须是对一个对象的引用,该对象是先前通过装箱该值类型的实例创建的。
* 检查对象实例,以确保它是给定值类型的装箱值。
* 将该值从实例复制到值类型变量中。
int string Form啥的 都可以
C#中有装箱和拆箱的特性
装箱就是 一个变量 或 这 对象转化成object类型, 装箱之后从外面看就都是object类型了比如 ArrayList 里面的项就都是object类型 添加一个值之后,就 被自动装箱 转化成object类型了
拆箱就是 将对象或者变量从 object类型转化成 原先的类型
记住必须从object类型转化成装箱之前的类型 才叫拆箱你说的从CTest 拆箱 这是不可能的