Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОСНОВЫ ОФИСНОГО ПРОГРАММИРОВАНИЯ И ЯЗЫК VBA - 1....doc
Скачиваний:
59
Добавлен:
17.12.2018
Размер:
1.88 Mб
Скачать

Конструкторы и деструкторы. Стандартные события

Следующим шагом в создании класса является разработка его конструкторов и деструктора. Напомним, что новый объект - экземпляр класса создается конструкцией New, например:

Dim MyRationalNumber As New Rational

В этот момент:

  • создается типизированный указатель MyRationalNumber,

  • создается новый объект - экземпляр класса Rational,

  • при создании объекта вызывается конструктор по умолчанию, инициализирующий этот объект, определяющий значения его свойств,

  • указатель связывается с объектом.

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

В VBA все проще. Во многом это объясняется тем, что здесь, в отличие от многих других языков программирования, есть разумная стратегия начальной инициализации переменных, - мы о ней говорили ранее. Поэтому здесь есть только конструктор по умолчанию - конструктор без параметров, да и тот часто не определяется, полагаясь на стандартную инициализацию. Конечно же, инициализировать объект "настоящими" значениями все равно придется в какой-то момент. Поэтому всегда для класса создаются свои конструкторы, синтаксически являющиеся методами, - их может быть несколько. В классе "Личность" таким конструктором с параметрами является метод InitPerson. Заметьте, мы могли бы определить еще один конструктор, который в отличие от первого, проводил бы полную инициализацию всех свойств, включая Отчество нашей личности.

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

Стандартные события Initialize и Terminate

Говоря о конструкторах и деструкторах, мы не сказали главного. Роль конструктора по умолчанию в классах VBA играет обработчик события Initialize. Это общее для многих объектов событие, встречается, когда объект загружается, для объектов - экземпляров классов оно возникает при создании объекта. У обработчика этого события нет параметров, поэтому он играет роль конструктора по умолчанию, не имеющего параметров. Роль деструктора играет обработчик события Terminate. Он вызывается, когда все ранее установленные ссылки на экземпляр объекта получают значение Nothing или все указатели перестают существовать, выйдя из области своего определения. Заметьте, что при ненормальном завершении программы это событие не возникает. Обработчик этого события (деструктор) пишется значительно реже, поскольку в момент его вызова объект и так корректно будет уничтожен.