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

Статические и динамические компоненты объектов


Каждый объект-участок включает в себя ячейку памяти для переменной Расход_краски_на_кв_м. Но очевидно, что расход краски на квадратный метр не зависит от участка. Следовательно каждому объекту иметь такую ячейку – излишний расход ресурсов компьютера. Достаточно иметь где-то одну-единственную ячейку. Но где? Ясно, что раз красят забор на участке, значит ячейка эта должна как-то относиться к участку. Придумали, что ячейка эта должна принадлежать классу Участок. Не отдельным объектам этого класса, а всему классу. Так и сделали.

Чтобы объяснить компьютеру, что вы хотите иметь именно такую переменную, вы в классе объявляете ее так:

Public  Shared  Расход_краски_на_кв_м As Integer

Слово  Shared  переводится как «разделенная» в смысле «разделенная между всеми объектами». У нас такие переменные принято называть статическими.

Обращаться к этой ячейке можно следующим образом:

Участок.Расход_краски_на_кв_м = TextBox5.Text

Debug.WriteLine(Участок.Расход_краски_на_кв_м)

Как видите, перед точкой мы пишем уже не имя объекта, а имя класса. Обратите внимание, что для обращения к статической переменной совершенно не нужно создавать из класса объекты. Впрочем, создав все-таки объекты, можно для вящего удобства с тем же успехом писать и по-старому:

Участки(k).Расход_краски_на_кв_м = TextBox5.Text

Debug.WriteLine(Участки(i).Расход_краски_на_кв_м)

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

Статическими могут быть не только переменные, но и процедуры и функции. Они определяются тоже с использованием слова Shared:

Public Shared Function А() As Integer

Для обращения к статической процедуре или функции тоже не нужно создавать из класса объекты. Яркий пример – класс Math пространства имен System. Мы пользовались математическими функциями этого класса, не обременяя себя созданием объекта из этого класса.

Статические переменные, процедуры и функции можно объявлять и с использованием слова Private. Тогда они не будут видны снаружи.

В противовес статическим компонентам объекта, те переменные, процедуры и функции, которые объявлены обычным образом, называются динамическими.

Вы можете задать вопрос: Зачем нам динамические процедуры и функции, когда вполне можно обойтись статическими? Ведь они же одинаковые, что у класса, что у объектов. Ответ прост и скучен: статические процедуры и функции не работают с динамическими переменными.



Содержание раздела