2013-06-11 3 views
4

Ладно, так что я обновляет VB6 приложение для VB.NET, и я не уверен в том, как модернизировать class_terminate компонент класса контейнера Я здание:Обновление VB6 контейнера класса в VB.NET

Private Sub class_terminate() 
    If Not (colUserMappings Is Nothing) Then 
     Set colUserMappings = Nothing 
    End If 
End Sub 

Проблема заключается в том, что эквивалент этого NET .Finalize оставляет некоторые потенциальные ошибки времени выполнения, поскольку установка конечной ссылки на контейнер не приводит к уничтожению контейнера, поскольку языки .NET не имеют детерминированного завершения.

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

+2

Вам не обязательно это делать. Сборщик мусора сделает для вас работу. – vcsjones

+0

Зачем вам нужно уничтожить класс контейнера, прежде чем все ссылки на него будут удалены? – RBarryYoung

+0

Итак, я могу просто полностью отказаться от класса class_terminate() полностью для новой версии? –

ответ

7

Мне было бы неинтересно об этом. .Net - это управляемая среда сбора мусора. Я уверен, что CLR позаботится о том, чтобы собрать эти объекты для вас, когда они больше не нужны.

Как правило, об этом следует беспокоиться только тогда, когда вы держите неуправляемые ресурсы (например, файлы, соединения БД, объекты COM и т. Д.). В этом случае вы можете реализовать IDisposable и правильно отпустить все свои объекты/ресурсы в методе Dispose().

+0

Он будет добавлять учетные данные пользователя из DB Connection, но сам контейнерный класс не будет управлять соединениями. Значит, CLR должен справиться с этим? –

+0

@VK_Dev да. для обычных объектов и классов, не беспокойтесь о том, чтобы установить их в «null». .Net будет обрабатывать это для вас. –

+0

Спасибо за ваши ответы! –

Смежные вопросы