Como: Implementar a Dispose Finalize padrão (Visual Basic)
The DisposeFinalize pattern ensures that resources are released when the object is no longer needed.
Exemplo
The ResourceClass class in the following example utilizes managed and unmanaged resources and then uses the DisposeFinalize pattern to dispose of them properly.Os recursos e suas funções são:
A implementação do Dispose método, que permite que os usuários da classe de descarte de instâncias de classe. Este método chama Dispose(True) para descartar o objeto de recursos e, em seguida, chama SuppressFinalize Para evitar que o código de finalização da execução de uma segunda vez.
A substituir do base Finalize método, que permite que o coletor de lixo de tempo de execução (CLR) linguagem comum descarte de instâncias de classe. Este método chama Dispose(False) para descartar os recursos do objeto. Observe que, se Dispose foi chamado anteriormente para o objeto, sua telefonar para SuppressFinalize impediria que o coletor de lixo telefonar a Finalize método.
A sobrecarga do Dispose método faz o trabalho de descarte. Ele usa um parâmetro booliano, disposing, que indica se o seu código iniciadas descarte do objeto. Quando você descartar um objeto, todos os seus recursos devem ser eliminados.Quando o coletor de lixo CLR descarta de um objeto, somente os recursos não gerenciado devem ser descartados, o coletor de lixo descarta automaticamente os recursos gerenciado quando necessário.
Para obter mais informações, consulte Como objetos são criados e destruídos Outros recursos.
Public Class ResourceClass
Implements IDisposable
Private managedResource As System.ComponentModel.Component
Private unmanagedResource As IntPtr
Protected disposed As Boolean = False
Public Sub New()
' Insert appropriate constructor code here.
End Sub
Protected Overridable Overloads Sub Dispose( _
ByVal disposing As Boolean)
If Not Me.disposed Then
If disposing Then
managedResource.Dispose()
End If
' Add code here to release the unmanaged resource.
unmanagedResource = IntPtr.Zero
' Note that this is not thread safe.
End If
Me.disposed = True
End Sub
Public Sub AnyOtherMethods()
If Me.disposed Then
Throw New ObjectDisposedException(Me.GetType().ToString, _
"This object has been disposed.")
End If
End Sub
#Region " IDisposable Support "
' Do not change or add Overridable to these methods.
' Put cleanup code in Dispose(ByVal disposing As Boolean).
Public Overloads Sub Dispose() Implements IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
Protected Overrides Sub Finalize()
Dispose(False)
MyBase.Finalize()
End Sub
#End Region
End Class
Este exemplo de código também está disponível como um trecho de código IntelliSense.No selecionador de trechos de código, ele está localizado em Visual Basic Language.Para obter mais informações, consulte Como: Inserir trechos em seu Código (Visual Basic).
Compilando o código
Este exemplo requer:
- Acesso aos membros do namespaces System e System.ComponentModel.Adicione uma declaração Imports se você não está qualificando completamente os nomes de membros em seu código.Para obter mais informações, consulte Declaração Imports (Tipo e Namespace .NET).
Essas alterações devem ser feitas no código:
Substituir ResourceClass com o nome da classe que implementa IDisposable.
Use o teste em AnyOtherMethods todos os métodos usando recursos que talvez tenham eliminados.
substituir the managedResource declaração com declarações de qualquer gerenciado objetos na sua classe precisa ser eliminado. Se uma classe implementa IDisposable ou tem um Close método, ele provavelmente precisa ser eliminado. No Dispose método, fechar ou descartar esses objetos.
Substitua o unManagedResource declaração com declarações de objetos não gerenciados em sua classe precisa ser eliminado. O método de descarte desses objetos depende de como o objeto é definido.Para obter detalhes, consulte a documentação do objeto.
Programação robusta
Uma vez o Dispose método foi chamado, os objetos contidos na sua coleção não será válido. Você deve testar o disposed campo antes de executar quaisquer operações em seu objeto. Para obter um exemplo, consulte o AnyOtherMethods método no exemplo de código.
Consulte também
Conceitos
Implementando um método Dispose