貌似见过的拆箱操作的范例,都是将一个值类型装箱为object,然后对这个object做拆箱操作。
我想问下,能否直接对某个引用类型进行拆箱?
如果不能,那么貌似拆箱没有什么作用啊?比如,我能否将我的一个类CTest进行拆箱?要想能对这个类拆箱,应当怎么做?
分数不多,但是结贴很及时,最多三天必定结贴,谢谢大家的帮助。

解决方案 »

  1.   

    拆箱不能单独出现,貌似会有异常
    另外,拆箱要的box类型,不装箱也没有
      

  2.   

    首先要搞懂值类型和引用类型
    引用类型分配在托管堆上,其生命周期又垃圾收集器控制。如果没有引用变量指向它,就会被释放。
    值类型分配在堆栈上,生命周期由Scope(也就是{})控制。出了scope就会释放。那么有些函数或者容器的参数是引用类型,但是我们想传值类型进去怎么办呢?
    这就有了装箱和拆箱。
    装箱,将值类型copy到堆中。并返回引用。
    拆箱,将装箱后的值类型再copy回到堆栈上。因此装箱只能应用到值类型上。而拆箱,只能应用到装箱后返回的引用上。
      

  3.   

    http://msdn.microsoft.com/zh-cn/b95fkada.aspx
    在msdn上用的术语是“取消装箱”。要在运行时成功取消装箱值类型,被取消装箱的项必须是对一个对象的引用,该对象是先前通过装箱该值类型的实例创建的。
      

  4.   

    取消装箱是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。取消装箱操作包括:
    * 检查对象实例,以确保它是给定值类型的装箱值。
    * 将该值从实例复制到值类型变量中。
      

  5.   

    先要理解装箱和取消装箱的用途,然后在用呀,你的CTest想给他拆箱是什么意思呢?想给它返回一个值类型?那直接写个方法ToValueType好了,如果想传输,还可以序列化
      

  6.   

    C#中所有类型都是从object衍生出来的所有类型都可以转化成object类型
    int  string Form啥的 都可以
    C#中有装箱和拆箱的特性
    装箱就是 一个变量 或 这 对象转化成object类型, 装箱之后从外面看就都是object类型了比如 ArrayList 里面的项就都是object类型 添加一个值之后,就 被自动装箱 转化成object类型了
    拆箱就是 将对象或者变量从 object类型转化成 原先的类型
    记住必须从object类型转化成装箱之前的类型 才叫拆箱你说的从CTest 拆箱  这是不可能的
      

  7.   

    装箱/拆箱,是值类型在没有基础类型的C#中的一个Bug,不是功能...