Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Зачет по ИСИС.docx
Скачиваний:
1
Добавлен:
21.09.2019
Размер:
49.29 Кб
Скачать

9 Вопрос

Переменные класса (в том числе и закрытые поля), объявленные за пределами его методов или свойств, доступны для всех членов класса. Переменные, объявленные в методе или свойстве, являются локальными по отношению к этому методу или свойству.

Переменные, объявленные на уровне модуля, доступны для всех классов, определенных в этом модуле, и для всего кода, обладающего доступом к этому модулю.

Таким образом, переменные уровня модуля являются глобальными по отношению к экземплярам классов.

Module Modulel

Dim aGlobal As Integer = 37

Sub Main()

Dim anA As New А()

Dim aB As New B()

Console. ReadLine()

End Sub

Public Class A Sub New()

aGlobal =aGlobal +17 Console.WriteLine(aGlobal)

End Sub

End Class

Public Class В Sub New()

Console.WriteLine(aGlobal)

End Sub

End Class

End Module

В данном случае целая переменная aGlobal определяется на уровне модуля, поэтому изменения, вносимые в aGlobal классом А, будут восприняты классом В. Использовать переменные уровня модуля не рекомендуется — все взаимодействие между классами должно быть реализовано на уровне обмена сообщениями!

10 Вопрос

Как правило, локальная переменная в процедуре прекращает свое существование сразу же после окончания выполнения процедуры. Статические переменные продолжают существовать, сохраняя самое последнее значение. При следующем вызове процедуры переменная не инициализируется повторно, а хранит последнее значение, которое ей было присвоено при последнем вызове процедуры. Статические переменные продолжают существовать в течение времени существования класса или модуля, в которых она определена.

Правила

Контекст объявления. Можно использовать Static только для локальных переменных. Это означает, что контекст объявления для переменной Static должен быть классом, структурой, модулем или интерфейсом, и не может быть исходным файлом, пространством имен, структурой или модулем.

Нельзя использовать Static внутри структуры процедуры.

Типы данных локальных переменных Static не могут быть выведены. Дополнительные сведения см. в разделе Вывод локального типа (Visual Basic).

Комбинированные модификаторы. Нельзя указывать в одном объявлении Static вместе с ReadOnly, Shadows или Shared.

Поведение

Поведение любой локальной переменной зависит от того, была ли она объявлена в процедуре Shared. Если процедура является Shared, все ее локальные переменные автоматически открыты для общего доступа. К ним также относятся все переменные Static. Существует только одна копия такой переменной для всего приложения. Вызов процедуры Shared осуществляется по имени класса, а не по переменной, указывающей на экземпляр класса.

Если процедура не является Shared, ее локальные переменные являются переменными экземпляров. К ним также относятся все переменные Static. В каждом экземпляре класса существует независимая копия каждой переменной. Вызов процедуры, не являющейся общей, осуществляется с помощью переменной, указывающей на определенный экземпляр класса. Любая переменная в этом экземпляре не зависит от переменной с таким же именем в другом экземпляре. Таким образом, они могут содержать различные значения.

Пример

Следующий пример демонстрирует использование Static.

VB

Function updateSales(ByVal thisSale As Decimal) As Decimal

Static totalSales As Decimal = 0

totalSales += thisSale

Return totalSales

End Function