4

好的,所以我正在将 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 语言具有非确定性的终结。

既然如此,我将如何对集合类进行现代化改造,以使调用其终止或终结函数实际上会导致容器在最后被破坏?有没有好的解决方法?

4

1 回答 1

7

我不会太在意这个。.Net 是一个托管的垃圾收集环境。我很确定 CLR 会在不再需要这些对象时为您收集这些对象。

作为一般规则,您应该只在获得非托管资源(例如文件、数据库连接、COM 对象等)时才担心这些事情。在这种情况下,您可能希望在方法中实现IDisposable并正确释放所有对象/资源Dispose()

于 2013-06-11T17:21:40.657 回答