Механизм действия ссылочных типов
Рассмотрим три похожих фрагмента:
Фрагмент 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, относится к обычным типам.
Во втором и третьем фрагментах тоже на первый взгляд должны были быть напечатаны две пятерки. Но все произошло по-другому, так как массивы (второй фрагмент) и классы (третий фрагмент) представляют не обычные, а ссылочные
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий