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



              


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


Рассмотрим три похожих фрагмента:

Фрагмент 1:

Фрагмент 2:

Фрагмент 3:

Dim A As Integer

Dim B As Integer

A = 5

B = A

Debug.WriteLine(B)

A = 100

Debug.WriteLine(B)

Dim A(2) As Integer

Dim B(2) As Integer

A(2) = 5

B = A

Debug.WriteLine(B(2))

A(2) = 100

Debug.WriteLine(B(2))

Dim A As New Класс

Dim B As New Класс

A.Поле= 5

B = A

Debug.WriteLine(B.Поле)

A.Поле= 100

Debug.WriteLine(B.Поле)

Что будет напечатано:

Что будет напечатано:

Что будет напечатано:

5

5

5

100

5

100

Вот код класса для третьего фрагмента:

Class Класс

    Public Поле As Integer

    Public Поле1 As Integer

End Class

Чтобы разобраться в работе трех фрагментов, вспомним, что все данные, с которыми работает любая программа, во время работы этой программы хранятся в ячейках оперативной памяти. Все ячейки пронумерованы, номер ячейки называют еще ее адресом (здесь я не вхожу в подробности о том, что на самом деле пронумерованы не ячейки, а байты).

1. Обычный тип. То, что в первом фрагменте распечатались две пятерки, вполне очевидно, но пояснения этой очевидности все-таки нужны, чтобы была понятней работа других фрагментов.

При выполнении оператора   Dim A, B As Integer   переменным A и B отводится в памяти по ячейке (которые заполняются нулями). При выполнении оператора  A = 5  в ячейке A появляется пятерка:

Адреса

Значения

A

000101

5

 

B

000102

0

При выполнении оператора  B = A  пятерка из ячейки A копируется в ячейку B, а то, что впоследствии пятерка в ячейке A меняется на сотню, никак не влияет на содержимое ячейки B.

Все происходит привычно, потому что тип Integer, к которому принадлежат переменные A и B, относится к обычным типам.

Во втором и третьем фрагментах тоже на первый взгляд должны были быть напечатаны две пятерки. Но все произошло по-другому, так как массивы (второй фрагмент) и классы (третий фрагмент) представляют не обычные, а ссылочные




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