我的意思是在内存中的储存,按照以前的理解,只有大的类型能够兼容小的类型,那为什么子类拓展了基类,还能被基类兼容呢? 是因为 放在堆中 只要应用的原因吗?

解决方案 »

  1.   

    简要答案:原因取决于对象的内存分配,个clr的管控,对象在内存中有一个**p,指向一个type方法表,type方法表维护一些对象的元数据,对象转换实际上只是修改了**P的指向,让他指向到另一个type方法表上,而这两个type表实际上是有包含关系的详细信息参阅:http://book.csdn.net/bookfiles/684/10068421441.shtml
      

  2.   

    比如你定义了A类、B类,B类从A类继承,现在有代码A a=new B();
    请问你a是A类的吗?说“是”并没有错。但是a既是A类也是B类,也就是说使用B b=(B)a;也没有错。说白了,a真正指向一个实例化为B的实例,只不过a这个对象引用声明为A类而已。你还以为a“在内存中”只是一个A类对象实例吗?
      

  3.   

    但是a既是A类也是B类  ->  但是a既是A类实例也是B类实例关键地,要看变量所引用的对象实例到底是什么类型,而不是仅仅看这个变量声明为什么类型。