请问,一定要值类型才装箱么?
这种方式算什么:
object obj=TextBox1;//(TextBox1为C#中的TextBox类的对象)

解决方案 »

  1.   

    装箱和取消装箱使值类型能够被视为对象。对值类型装箱将把该值类型打包到 Object 引用类型的一个实例中。这使得值类型可以存储于垃圾回收堆中。取消装箱将从对象中提取值类型。在此示例中,整型变量 i 被“装箱”并赋值给对象 o。int i = 123;
    object o = (object) i;  // boxing 然后,可以对对象 o 取消装箱并将其赋值给整型变量 i:o = 123;
    i = (int) o;  // unboxing 性能
    相对于简单的赋值而言,装箱和取消装箱过程需要进行大量的计算。对值类型进行装箱时,必须分配并构造一个全新的对象。次之,取消装箱所需的强制转换也需要进行大量的计算。有关更多信息,请参见性能。
      

  2.   

    值类型=》引用类型2.0里已经建议用反省<T>解决装箱拆箱问题了
      

  3.   

    我也好奇哈,刚测试了一下
    object obj = textBox4;断点监视, obj为  "Text = 0"object obj = textBox4.Text;断点监视,obj 为  "0"我感觉object obj=TextBox1应该不叫装箱,两边都是对象,只不过左边是基类对象,这种应该就是对象赋值.而object obj = textBox1.Text;毫无疑问为装箱操作.大家觉得呢?
      

  4.   

    这种方式算什么: 
    object obj=TextBox1;//(TextBox1为C#中的TextBox类的对象)

    不算装箱。请问,一定要值类型才装箱么? 
    是。
      

  5.   

    object obj=TextBox1;//(TextBox1为C#中的TextBox类的对象)
    ==
    TextBox是类 引用类型,TextBox1是TextBox的一个对象,不算装箱
      

  6.   

    只有值类型转换为引用类型才能叫装箱,object obj=TextBox1显然不能称为装箱
      

  7.   

    1.装箱是编译器为处理基本数据类型 如 int ,char 这些的值类型在调用方法时
       string s=10.ToString();
    所用的规则,int 只是一个值非对象,所以要在堆中产生一个临时引用 object tmpObj=(object)10; 用tmpObj完成操作。2.拆箱即把引用类型转为值类型。
      

  8.   


    object obj = textBox4.Text;
    string 不是值类型!!!
      

  9.   

    从il的角度来说,il中出现box的就是装箱,相反,出现unbox的就是拆箱
    从c#的角度来说,把值类型强转成引用类型(Object类,ValueType类,Enum类,或者接口)就是装箱,反过来从引用类型强转成值类型就是拆箱
    装箱和拆箱有性能损失,主要是装箱的性能损失比较大,因为需要clr分配一块托管内存