Feedback

VB - Disposable als Basis-Klasse

Veröffentlicht von am 14.08.2013
(1 Bewertungen)
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

Abgelegt unter IDisposable, Dispose, Klassen, Vererbung.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!