Обновите класс контейнера VB6 до VB.NET

Итак, я обновляю приложение VB6 до VB.NET и не знаю, как модернизировать компонент class_terminate класса контейнера, который я создаю:

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

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

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


person Adam Boyce    schedule 11.06.2013    source источник
comment
Вы не должны этого делать. Сборщик мусора сделает всю работу за вас.   -  person vcsjones    schedule 11.06.2013
comment
Почему вам нужно уничтожить класс контейнера до того, как все ссылки на него будут удалены?   -  person RBarryYoung    schedule 11.06.2013
comment
Так что я могу просто полностью отказаться от class_terminate() для новой версии?   -  person Adam Boyce    schedule 11.06.2013
comment
да. Вам это совсем не нужно.   -  person Joel Coehoorn    schedule 11.06.2013
comment
Фактически, вам не нужно было бы делать это в VB6! Это был просто код занятости.   -  person Mark Bertenshaw    schedule 12.06.2013


Ответы (1)


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

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

person Federico Berasategui    schedule 11.06.2013
comment
Он будет добавлять учетные данные для доступа пользователя из соединения с БД, но сам класс контейнера не будет управлять соединениями. Значит, CLR должна справиться с этим? - person Adam Boyce; 11.06.2013
comment
@VK_Dev да. для обычных объектов и классов не беспокойтесь об установке их в null. .Net сделает это за вас. - person Federico Berasategui; 11.06.2013