Int32 v = 5;
Object o = v;
Console.WriteLine(v.ToString()+","+(Int32)o);
上面代码中,
v.ToString会进行装箱操作不~?

解决方案 »

  1.   

    http://blog.csdn.net/chclvzxx/article/details/8222568
      

  2.   

    我就是因为上面没明确说明我才问这个问题的...
    上面的连接是重写了ToString的方法的...如果没重写ToString的方法,那还会装箱不~?
      

  3.   

    值类型转成引用类型为装箱,INT只值类型,string为引用类型。。
      

  4.   

    v.ToString是Object.ToString,不是int.ToString
      

  5.   

    我就是因为上面没明确说明我才问这个问题的...
    上面的连接是重写了ToString的方法的...如果没重写ToString的方法,那还会装箱不~?
      

  6.   

     不同意,就算是经过Object o = v;但v.ToString还是int.ToSting,只是int.ToString会调用valueType的ToString()而不需装箱而已...
      

  7.   


    .method private hidebysig static void  Main(string[] args) cil managed
    {
      .entrypoint
      // 代码大小       45 (0x2d)
      .maxstack  3
      .locals init ([0] int32 v,
               [1] object o)
      IL_0000:  nop
      IL_0001:  ldc.i4.5
      IL_0002:  stloc.0
      IL_0003:  ldloc.0
      IL_0004:  box        [mscorlib]System.Int32
      IL_0009:  stloc.1
      IL_000a:  ldloca.s   v
      IL_000c:  call       instance string [mscorlib]System.Int32::ToString()
      IL_0011:  ldstr      ","
      IL_0016:  ldloc.1
      IL_0017:  unbox.any  [mscorlib]System.Int32
      IL_001c:  box        [mscorlib]System.Int32
      IL_0021:  call       string [mscorlib]System.String::Concat(object,
                                                                  object,
                                                                  object)
      IL_0026:  call       void [mscorlib]System.Console::WriteLine(string)
      IL_002b:  nop
      IL_002c:  ret
    } // end of method Program::Main
    一目了然
      

  8.   

    给object v赋值int后 其实是在托管堆里新创建了一个对象.你可以把int变量更改值,看下v是不是也改了? 如果v没改 那说明他们不是一个东西
      

  9.   

    上面代码中,
    v.ToString会进行装箱操作不~?肯定不会。v.ToString()
    调用的是int.ToString()方法而不是object.ToString()方法因为int从object派生。
    int类型重写了基派的toString方法。
    当派生类重写基类方法时,调用的是派生类的方法,而不是基类方法。
      

  10.   

    谢谢你的回答...我查过了关于MSDN的资料,Int.ToSring方法是重写了ValueType的ToString的方法,换言之,Int的基类是ValueType,2楼的链接有介绍的...
    装箱是将值类型转换为 object 类型或由此值类型实现的任一接口类型的过程。参考MSDN http://msdn.microsoft.com/zh-cn/library/vstudio/yz2be5wk.aspx 此链接中,说明了看值类型有没有进行拆箱,就看他有没有装换成Object或者值类型所继承的接口类型...
    Int.ToString 此方法中,值类型转换成ValueType类型,不满足装箱的条件,(加上本人查看IL代码确实没出现BOX)所以,可以判定Int.ToString是没有装箱的了