Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

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

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

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

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

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

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

Чаще удалять экземпляры класса (и добавлять) должна некоторая внешняя по отношению к классу программа. В нашем случае можно воспользоваться коллекцией 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.

<== предыдущая лекция | следующая лекция ==>
Как исп польз события | Тема 7. Обмен сообщениями. Протокол DDE
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 290; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.