выделение памяти для базовых переменных при создании производного объекта в c #? - PullRequest
0 голосов
/ 12 июня 2018

где хранятся переменные-члены базового класса, когда объект производного класса создается в 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 голосов
/ 12 июня 2018

Вы создаете один объект (в куче) с всеми полями, объявленными в иерархии типов.Я считаю, что это зависит от реализации, в каком порядке они хранятся, но я не удивлюсь, увидев все поля в базовом классе, затем поля, объявленные в производном классе, и т. Д. (Таким образом, смещение дляПоле для любого данного объявленного типа всегда будет одинаковым независимо от типа времени выполнения.)

Таким образом, структура памяти может выглядеть примерно так:

  • Заголовок объекта / блок синхронизации
  • Указатель таблицы методов
  • Поле i
  • Поле j

Но ответить на самую прямую частьвашего вопроса: все значения, которые составляют состояние объекта, хранятся вместе, независимо от того, в каком типе объявлено каждое поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...