Cuando implementar la interfaz IDisposable:
- Cuando la clase contenga alguna variable de tipo "Unmanaged".
- Cuando la clase contenga alguna variable que implemente la interfaz IDisposable.
- Cuando la clase contenga manejadores (handlers) de eventos.
En los dos primeros casos el motivo es obvio, pero en el tercero es un poco más obscuro. Cuando tengamos una clase que contenga manejadores de eventos hay que implementar la interfaz IDisposable para quitar el manejador cuando se llame al método Dispose. Si no se hace las referencias entre las dos clases se mantienen en memoria y no se eliminan.
Como implementar la interfaz IDisposable:
Para una correcta implementación de la interfaz se deberá usar el siguiente código obviando el generado automáticamente por VS puesto que este no permite efectuar correctamente un Override del método Dispose en las clases herederas al no poder consultar el estado de disposedValue.
#Region "IDisposable" Private m_disposed As Boolean
Protected ReadOnly Property Disposed() as Boolean Get Return m_disposed End Get End Property
Protected Overridable Sub Dispose(ByVal disposing As Boolean) If Not m_disposed Then If disposing Then ' Free other state (managed objects). End If ' Free your own state (unmanaged objects). ' Set large fields to null. End If
m_disposed = True End Sub
Public Sub Dispose() Implements IDisposable.Dispose ' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above. Dispose(True) GC.SuppressFinalize(Me) End Sub
Protected Overrides Sub Finalize() ' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above. Dispose(False) MyBase.Finalize() End Sub#End Region