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



              


Механизм действия ссылочных типов - часть 3


/p>

Вы видите, что три числа в области памяти 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.Поле)




Содержание  Назад  Вперед