Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Работа с классами / 15 сообщений из 15, страница 1 из 1
10.01.2005, 17:56:42
    #32857905
RuslanLisovenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с классами
Для удаления объекта класса достаточно ли будет
...............................
Set g_oADO = Nothing

объявлен клас так
Public g_oADO As New CADO
----------------------------------
когда вообще идет обращение к методу класса ?
Private Sub Class_Terminate()
----------------------------------
А вообще кто знает есть ли какой-то менеджер объектов мониторинга их в памяти ..под Access....удаления и оптимизация?
...
Рейтинг: 0 / 0
10.01.2005, 18:11:12
    #32857921
MLeon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с классами
Про мониторинг объектов не скажу. Set g_oADO = Nothing - просьба удалить объект, access сделает это, когда ему удобно. Для public это единственный способ. Если объект используется в одном модуле, лучше объявить его private.
...
Рейтинг: 0 / 0
10.01.2005, 18:15:16
    #32857927
RuslanLisovenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с классами
MLeonПро мониторинг объектов не скажу. Set g_oADO = Nothing - просьба удалить объект, access сделает это, когда ему удобно. Для public это единственный способ. Если объект используется в одном модуле, лучше объявить его private.

g_oADO дело в том в пределах этого класса все работает, .....
если вызвать любой public метод класса как вы рекомендуете , тогда идет обращение к Private Sub Class_Initialize()

Я хочу знать Set g_oADO = Nothing выполняет ли вызов Class_Terminate ???
...
Рейтинг: 0 / 0
10.01.2005, 18:17:23
    #32857933
RuslanLisovenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с классами
Public g_oADO As New CADO

CADO - это собственно клас.
g_oADO - есть собственно объект-клас
...
Рейтинг: 0 / 0
10.01.2005, 18:30:30
    #32857952
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с классами
Не знаю, будет ли моя реплика к месту, но:

Если описать нечто As New, то потом трудно превратить его в Nothing. Поэтому вместо

Dim X As New Y

лучше писать

Dim X As Y
Set X = New Y
...
Рейтинг: 0 / 0
10.01.2005, 18:51:48
    #32857967
Alexey Sh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с классами
А потому, лучше иметь в классе явно вызываемый метод Close, который проведёт очистку приватных переменных. В этом случае запоздалый Terminate вызывает меньше проблем. Это же относится и к стандартным классам, типа Recordset
...
Рейтинг: 0 / 0
10.01.2005, 19:11:17
    #32857991
RuslanLisovenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с классами
Владимир СанычНе знаю, будет ли моя реплика к месту, но:

Если описать нечто As New, то потом трудно превратить его в Nothing. Поэтому вместо

Dim X As New Y

лучше писать

Dim X As Y
Set X = New Y

УГУ не догадался проверить .счас попробую
...
Рейтинг: 0 / 0
10.01.2005, 19:13:38
    #32857992
RuslanLisovenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с классами
Alexey ShА потому, лучше иметь в классе явно вызываемый метод Close, который проведёт очистку приватных переменных. В этом случае запоздалый Terminate вызывает меньше проблем. Это же относится и к стандартным классам, типа Recordset

Так как Вы советуете метод Close класса вызовет еще раз Class_Initialize.
...
Рейтинг: 0 / 0
10.01.2005, 19:17:43
    #32858000
Alexey Sh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с классами
Никакой мистики, обычный юзерский метод Close сделает только то что в нём написано. Инициализация произойдёт после присваивания Nothing и последующего обращения к свойтву/методу. Что тут рассуждать, лучше попробовать самому и посмотреть порядок вызовов
...
Рейтинг: 0 / 0
10.01.2005, 19:23:04
    #32858007
RuslanLisovenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с классами
Alexey ShНикакой мистики, обычный юзерский метод Close сделает только то что в нём написано. Инициализация произойдёт после присваивания Nothing и последующего обращения к свойтву/методу. Что тут рассуждать, лучше попробовать самому и посмотреть порядок вызовов

не фига еще раз проверил........при обращении к методам класса все равно первым вызывается метод Private Sub Class_Initialize

Вот когда срабатывает Class_Terminate так и не удалось ....?
...
Рейтинг: 0 / 0
10.01.2005, 19:35:52
    #32858025
Alexey Sh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с классами
Class_Terminate вызовется при обнулении счётчика ссылок на экземпляр класса.

Dim X As Y
Set X = New Y
X.method .....

Set X=Nothing
вот здесь и вызовется Class_Terminate
...
Рейтинг: 0 / 0
11.01.2005, 10:53:36
    #32858528
Dmitry Biryukov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с классами
Alexey ShClass_Terminate вызовется при обнулении счётчика ссылок на экземпляр класса.Совершенно верно! Alexey Sh
Dim X As Y
Set X = New Y
X.method .....

Set X=Nothing
вот здесь и вызовется Class_TerminateА вот это - не всегда. Например, если вместо
Код: plaintext
.....
подставить
Код: plaintext
set X2 = X
то Class_Terminate не вызовется
Так что ищите где ещё используется переменная g_oADO
...
Рейтинг: 0 / 0
12.01.2005, 12:56:49
    #32860927
MVN
MVN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с классами
Если другой класс создает этот и возвращает его вам в переменную, то nothing этого класса сам класс не уничтожит.

Если класс создал другие классы, то nothing то же не сработает пока не будут уничтожены все вызванные экземпляры; сработает после уничтожения вызванных классов - тогда и будет вызвано событие terminate.
...
Рейтинг: 0 / 0
12.01.2005, 15:46:16
    #32861489
RuslanLisovenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с классами
MVNЕсли другой класс создает этот и возвращает его вам в переменную, то nothing этого класса сам класс не уничтожит.

Если класс создал другие классы, то nothing то же не сработает пока не будут уничтожены все вызванные экземпляры; сработает после уничтожения вызванных классов - тогда и будет вызвано событие terminate.


Уточните покажите пример плиз.........
...
Рейтинг: 0 / 0
12.01.2005, 16:42:23
    #32861675
Alexey Kudinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с классами
Dmitry Biryukov Alexey ShClass_Terminate вызовется при обнулении счётчика ссылок на экземпляр класса.Совершенно верно! И это весьма логично, если вдуматься, т.к. Class_Initialize также срабатывает ровно один раз при создании экземпляра, а не при создании каждой ссылки на него
:)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Работа с классами / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]