ПОНЯТНО О Visual Basic NET (том 3)

         

Вы видите, что три числа


Вы видите, что три числа в области памяти 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
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий