小弟刚接触C#,有个问题一直搞不明白,特向各位大牛请教,谢谢!!!
1、对象在堆中是如何实现的,数据成员与方法如何存放?特别是在有派生类的情况下。是不是有个vft(virtual function table)?能不能解释下啥是vft?咋实现的?
2、用基类变量指向派生类对象的应用时,这个赋值到底发生了什么,基类变量指向的内存地址或者大小发生变化没有?
如 class parent(){ public void print(){;} public int i;}
   class child(){public void print(){;}public int j }
  当 parent a=new child();
时,这个赋值发生了什么?
为什么a 只能访问基类的数据成员i而不能访问派生类的j?

解决方案 »

  1.   

    学习c#的时候其实你可以不去了解这些关于内存如何布局的问题,这通常是在native c/c++中才需要了解的问题。因为你通常不会在c#中使用指针,并且其垃圾回收机制也令你基本不必去考虑内存方面的问题。
      

  2.   

    至于你说的那几段代码的问题,需要了解的是面向对象方面的知识。
     parent a=new child(); //基类的对象当然不能访问派生类的成员了,虽然实际上是个child对象,但其类型是parent,向上转换后,已经屏蔽了对派生类成员的访问