Вы видите, что три числа
Вы видите, что три числа в области памяти 002300 не изменились. Почему же тогда первый из двух операторов Debug.WriteLine(B(2)) печатает пятерку, а не ноль? Вот почему. Механизм обращения к памяти здесь тот же, что и описанный парой абзацев ранее механизм обращения к памяти при выполнении оператора A(2) = 5. Компьютер, зная, что массив является ссылочным типом, рассматривает значение 002040 в ячейке для переменной B, как адрес, и отправляется по указанному адресу, где находит три ячейки. Индекс 2 указывает ему, что для печати нужно выбрать значение из последней ячейки, а там находится пятерка.
А кому же теперь нужна область 002300? В том-то и дело, что никому! Ссылок на нее теперь не существует и воспользоваться ей уже нельзя, даже если вы и захотите. Она превратилась в мусор (garbage). Уборкой мусора занимается VB и делает это без вашего ведома и участия.
Я думаю, что теперь мне не нужно объяснять, почему второй из двух операторов Debug.WriteLine(B(2)) напечатает сотню.
3. Классы. Аналогично рассматривается третий фрагмент. При создании объекта из класса, как и при создании массива, в памяти под объект отводится одна ячейка и еще дополнительно область памяти для хранения элементов объекта (в нашем случае две ячейки для полей, которые заполняются нулями). В этой одной ячейке находится ссылка на область памяти. Вот что будет в памяти при окончании работы третьего фрагмента:
Адреса | Значения | Адреса | Значения | |||
A | 000101 | 002040 | ![]() ![]() | Поле | 002040 | 100 |
Поле1 | 002041 | 0 | ||||
B | 000102 | 002040 | Поле | 002300 | 0 | |
Поле1 | 002301 | 0 |
Задание 21.
Что напечатает фрагмент:
Dim A, B, C As Класс
A = New Класс
A.Поле = 100
B = A
C = New Класс
C.Поле = 50
A = C
Debug.WriteLine(A.Поле)
Debug.WriteLine(B.Поле)
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий