解决方案 »

  1.   

    右键,转到反汇编。 dword ptr [ebp-40h]这里是myClass变量的地址
    而这句话 object obj = (object)myClass;只是把dword ptr [ebp-40h]的值放到了dword ptr [ebp-44h]里面
    dword ptr [ebp-44h]是obj变量的地址
      

  2.   

    对象的赋值就是赋引用,即地址(C语言中称指针),所以myClass 和obj 都是指向堆中同一地址。附:
    Equals与==的区别
    "==" : 对于值类型,比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。引用类型中的string比较特殊,重载了==,所以 比较字符串的值。
    "equals" : 操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。  字符串是一个特殊的引用型类型,在C#语言中,重载了string 对象的很多方法,包括equals()方法
      

  3.   

    2,3,4楼,谢谢呀,但是我问的是转换的问题呀- - ==和equels的区别我知道。。
      

  4.   

    那obj==myClass应该为false呀!见上图,==是比较这两个变量的地址,他俩地址是一样的吖
      

  5.   

    我觉得主要是因为引用类型转object不同值类型。值类型需要装箱,实际上就是创建了一个新对象。引用型转object应该只是类型标示变了。 你可以试试看建个基类和派生类去试试。
      

  6.   

    那obj==myClass应该为false呀!见上图,==是比较这两个变量的地址,他俩地址是一样的吖对,对于引用型,==是比较栈里2个对象存储的地址是否一致(string由于重写了==所以作用同值类型)。LZ不明白的是类型转换了,为何引用的地址不会变。
      

  7.   

    你说的并不完全错,实际上对了一半。既可以是兼容类型对象的转换,也可以是调用自定义转换方法的转换。http://bbs.csdn.net/topics/360039451