在c#中创建派生对象时,基本变量带的内存分配?

时间:2018-06-12 10:15:16

标签: c# inheritance

当在c#中创建派生类的对象时,存储的基类的成员变量是什么?

 using System;
 class A
 {
   public int i;
 }
 class B:A
 {
   public int j;
   static public void Main()
   {
       B b = new B();
   }
 }

这里创建了b对象,其中i变量存储在堆中?它是存储在b本身的实例中还是单独存储?

1 个答案:

答案 0 :(得分:2)

您正在创建单个对象(在堆上), all 在类型层次结构中声明的字段。我相信它的实现特定于它们存储的顺序,但是看到基类中的所有字段,然后是派生类中声明的字段等,我不会感到惊讶。 。(这样,无论执行时间类型如何,任何给定声明类型的字段的偏移量总是相同的。)

因此内存布局可能类似于:

  • 对象标题/同步块
  • 方法表指针
  • 字段i
  • 字段j

但要回答你问题的最直接部分:构成对象状态的所有值都存储在一起,无论每个字段的声明类型如何。