как определить размер объекта? - PullRequest
0 голосов
/ 22 августа 2011
Public Class A
    Private aa As Integer
    Dim bb As Integer
    Public cc As Integer
End Class

Public Class B
    Inherits A

    Private dd As Integer
    Dim ee As Integer
    Public ff As Integer
End Class

Public Class C
    Dim oA As New A
End Class

каков размер объекта oA?
а что если класс A и B содержат методы? (я имел в виду размер объекта)
Что, если унаследованный класс B содержит переопределенные методы? (размер объекта)
Что, если унаследованный класс B содержит переменные с тем же именем, что и в классе A? (размер объекта)

Мне нужен теоретический ответ. Имеют ли эти спецификаторы доступа Private, Dim, Public какую-либо разницу в распределении памяти из-за их различных областей действия?
На каком основании выделяется память для метода? и т.д.

1 Ответ

2 голосов
/ 22 августа 2011
  • oA - переменная, содержащая ссылку, а не объект; размер ссылки зависит от платформы, но обычно составляет 4 байта на x86 и 8 байтов на x64
  • объект , на который ссылается по oA, имеет тип A и имеет 3 целых числа, поэтому его размер составляет 12 байтов плюс стандартный заголовок объекта
  • методы не влияют на размер объекта (независимо от того, являются ли они прямыми или унаследованными)
  • экземпляр типа B имеет 6 целых чисел (3 напрямую, 3 унаследовано от A); любое совпадение имен не влияет на тот факт, что они существуют - поэтому размер составляет 24 байта плюс стандартный заголовок объекта
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...