Nur einfach die Dispose-Methode der IDisposable-Schnittstelle zu implementieren, reicht eigentlich nicht ganz aus. Wie man es richtig machen sollte, sieht man spätestens nach dem Einfügen der Anweisung "Implements IDisposable" in eine Klasse und anschließendem Betätigen der Enter-Taste: in einer VB-Klasse fügt Visual Studio automatisch einen ganzen Wust an Code hinzu - gespickt mit Kommentaren, die man erst einmal wieder aufräumen muss ...
Möchte man eine Klasse von einer bestehenden Klasse ableiten, kommt man um eine Implementierung von Hand oder solchermaßen unterstützt nicht herum. Möchte man jedoch eigene, "frische" mit der Schnittstelle IDisposable versehene Klassen erstellen, genügt es, sich die Arbeit ein einziges Mal zu machen - in der Basis-Klasse "Disposable", von der man ja wiederum beliebige weitere Klassen ableiten kann.
Damit man es in davon abgeleiteten Klassen bequemer hat, bietet sie die beiden überschreibbaren Methoden "DisposeManaged" und "DisposeUnmanaged", in denen man ganz einfach den jeweils zum Aufräumen benötigten Code unterbringen kann.
Public MustInherit Class Disposable
Implements IDisposable
Protected Sub New()
'
End Sub
Protected Overrides Sub Finalize()
Me.Dispose(False)
MyBase.Finalize()
End Sub
Private mIsDisposed As Boolean
<Browsable(False)> _
Public ReadOnly Property IsDisposed As Boolean
Get
Return mIsDisposed
End Get
End Property
Public Sub Dispose() Implements IDisposable.Dispose
Me.Dispose(True)
GC.SuppressFinalize(Me)
End Sub
Private Sub Dispose(disposing As Boolean)
If Not mIsDisposed Then
mIsDisposed = True
If disposing Then
SyncLock Me
Me.DisposeManaged()
End SyncLock
End If
Me.DisposeUnmanaged()
End If
End Sub
Protected Overridable Sub DisposeManaged()
'
End Sub
Protected Overridable Sub DisposeUnmanaged()
'
End Sub
End Class
Kommentare zum Snippet