Статические и динамические компоненты объектов
Каждый объект-участок включает в себя ячейку памяти для переменной Расход_краски_на_кв_м. Но очевидно, что расход краски на квадратный метр не зависит от участка. Следовательно каждому объекту иметь такую ячейку – излишний расход ресурсов компьютера. Достаточно иметь где-то одну-единственную ячейку. Но где? Ясно, что раз красят забор на участке, значит ячейка эта должна как-то относиться к участку. Придумали, что ячейка эта должна принадлежать классу Участок. Не отдельным объектам этого класса, а всему классу. Так и сделали.
Чтобы объяснить компьютеру, что вы хотите иметь именно такую переменную, вы в классе объявляете ее так:
Public Shared Расход_краски_на_кв_м As Integer
Слово Shared переводится как «разделенная» в смысле «разделенная между всеми объектами». У нас такие переменные принято называть статическими.
Обращаться к этой ячейке можно следующим образом:
Участок.Расход_краски_на_кв_м = TextBox5.Text
Debug.WriteLine(Участок.Расход_краски_на_кв_м)
Как видите, перед точкой мы пишем уже не имя объекта, а имя класса. Обратите внимание, что для обращения к статической переменной совершенно не нужно создавать из класса объекты. Впрочем, создав все-таки объекты, можно для вящего удобства с тем же успехом писать и по-старому:
Участки(k).Расход_краски_на_кв_м = TextBox5.Text
Debug.WriteLine(Участки(i).Расход_краски_на_кв_м)
Пусть вас не обманывает такая запись. В объектах не существует ячеек под переменную Расход_краски_на_кв_м, такая ячейка одна на всех и принадлежит классу.
Статическими могут быть не только переменные, но и процедуры и функции. Они определяются тоже с использованием слова Shared:
Public Shared Function А() As Integer
Для обращения к статической процедуре или функции тоже не нужно создавать из класса объекты. Яркий пример – класс Math пространства имен System. Мы пользовались математическими функциями этого класса, не обременяя себя созданием объекта из этого класса.
Статические переменные, процедуры и функции можно объявлять и с использованием слова Private. Тогда они не будут видны снаружи.
В противовес статическим компонентам объекта, те переменные, процедуры и функции, которые объявлены обычным образом, называются динамическими.
Вы можете задать вопрос: Зачем нам динамические процедуры и функции, когда вполне можно обойтись статическими? Ведь они же одинаковые, что у класса, что у объектов. Ответ прост и скучен: статические процедуры и функции не работают с динамическими переменными.