如何在类有多个成员时实现Dispose

时间:2013-07-12 08:37:20

标签: .net vb.net idisposable

如何实现处理一个类,它将对象作为不实现IDisposable的成员?

请参考以下示例了解我的意思:

Public Class MyClass
    Implements IDisposable

    private emp as EmpClass
    private dept as DeptClass

    ' EmpClass and DeptClass doesn't implemented IDisposable interface. 

    ' IDisposable
    Protected Overridable Sub Dispose(disposing As Boolean)
       If Not Me.disposedValue Then
          If disposing Then
            emp = Nothing  ' --> Can't call Dispose method so I set to null
            dept = Nothing ' --> Can't call Dispose method so I set to null
          End If
       End If
      Me.disposedValue = True
    End Sub
End Class

从上面看,所有都是托管对象,我可以做必要的更新。所以请建议那个代码好。

被修改

当我尝试创建MyClass的实例时,编译器给了我一个错误,我必须实现IDisposable。以下是我的通话代码。

Using ctx = MyFactory.CreateMyClass()
     'DO Something
End Using

1 个答案:

答案 0 :(得分:5)

来自MS

  

此接口的主要用途是释放非托管资源。   垃圾收集器自动释放分配给的内存   不再使用该对象时的托管对象。但事实并非如此   可以预测何时会发生垃圾收集。此外,   垃圾收集器不了解非托管资源,例如   窗口句柄,或打开文件和流。

因此,如果您的类不使用流,文件或非托管对象,则无需调用Dispose或实现IDisposable。 可以处置的其他事情是删除不再需要的听众