Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Korporativnye_informatsionnye_sistemy.docx
Скачиваний:
12
Добавлен:
01.03.2025
Размер:
260 Кб
Скачать
☆

Создание экземпляра класса.

Еще раз повторим все способы создания экземпляра класса (создания объекта).

Наиболее общий способ - применение конструктора New, за которым следует имя класса. Таким образом создаются экземпляры пользовательских классов.

Если вы работаете со встроенной объектной моделью, то часто для создания экземпляра требуется добавить элемент в коллекцию. Таким образом можно добавить лист Excel в коллекцию Sheets, добавить элементы управления на форму (коллекция Controls) и т.п.

Для ActiveX объектов, зарегистрированных в реестре, требуется вызвать CreateObject (или иногда GetObject).

Интересно, что можно воспользоваться и конструктором New для формирования объекта Word из Excel. Рассмотрите пример ниже. Это - программа в Excel, в ней открывается приложение Word, а затем открывается некоторый документ.

Private Sub ww()

Dim w As Word.Application

Set w = New Word.Application

w.Documents.Open "c:\STUDENT\w2.doc"

End Sub

Автоматическая сборка мусора

Сборкой мусора называется процесс, при котором операционная система удаляет из памяти объекты, на которых нет ссылок.

На элементы встроенной объектной модели практически всегда есть ссылка из какой-нибудь коллекции. Поэтому, даже если вы не создаете в программе переменных – ссылок на добавляемые Вами динамически элементы, эти объекты не уничтожаются.

Если же Вы будете создавать два экземпляра своего класса, а для ссылки на них используете одну и ту же переменную, то получите реально только один экземпляр.

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

Уничтожение экземпляра класса

Достаточно редко предлагает класс среди своих методов метод удаления экземпляра класса. Это понятно, ведь получается, что должен работать метод уже уничтоженного (уже не существующего вместе со всеми своими свойствами и методами!) объекта.

Чаще удалять экземпляры класса (и добавлять) должна некоторая внешняя по отношению к классу программа. В нашем случае можно воспользоваться коллекцией Controls. Метод Add – добавление элементов, а метод Remove – удаление.

Параметр метода Remove – номер элемента коллекции. А как его определить? Рассмотрим способ запоминания в самом объекте, номера, с которым он входит в коллекцию. Для этого можно воспользоваться либо свойством tag, которое есть у всех элементов управления, либо завести соответствующее свойство в нашем классе.

Заметим, что с номерами работать невозможно в случае, если изменяется количество элементов коллекции в результате удаления произвольного элемента или добавления в произвольное мемто.

Может лучше работать с именем? Имя – свойство объекта, поэтому его не надо нигде повторно запоминать! Имя вы можете даже сами генерировать, если Вас не устраивает имя по умолчанию.

Остановимся на имени, причем будем брать умалчиваемое имя.

Ниже описан пример. Итак, в классе с именем Class1:

Public WithEvents im As Image

Private Sub Class_Initialize()

Set Me.im = UserForm1.Controls.Add("Forms.Image.1")

End Sub

В обычном модуле с именем Module1:

Public ob As Class1

Sub игра()

UserForm1.CommandButton1.Caption = "начать"

UserForm1.Show

End Sub

В форме с именем UserForm1:

Private Sub CommandButton1_Click()

If Me.CommandButton1.Caption = " начать" Then

Me.CommandButton1.Caption = "остановить"

Set Module1.ob = New Class1

Else

Me.CommandButton1.Caption = " начать"

Module1.ob.im.Parent.Controls.Remove Module1.ob.im.Name

Set Module1.ob = Nothing

End If

End Sub

В приведенном примере обратите внимание на строчку в инициализации класса, в которой создается элемент на форме и одновременно устанавливается на него ссылка из экземпляра класса. В строчках модуля – вызов формы. В программном коде формы: при щелчке по кнопке «начать» – создается экземпляр нашего класса, а при щелчке по кнопке «остановить» – удаляется элемент управления на форме и экземпляр нашего класса. Здесь важно понять, что от элемента управления можно перейти к форме, воспользовавшись методом Parent (объект – родитель), а затем снова вернуться к нему, но по другой ветке объектного дерева (Controls).

В приведенном примере всюду указан модуль как надобъект над объектной переменной ob. Это не случайно, хотя и не обязательно: по умолчанию свойство ob доступно во всем проекте. Здесь просто подчеркнут факт, что ob является свойством объекта Module1.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]