Visual Basic .NET Language
Einweggegenstände
Suche…
Grundkonzept von IDisposable
Jedes Mal, wenn Sie eine Klasse instanziieren, die IDisposable
, sollten Sie .Dispose
1 für diese Klasse aufrufen, wenn Sie die Verwendung beendet haben. Dadurch kann die Klasse verwaltete oder nicht verwaltete Abhängigkeiten bereinigen, die sie möglicherweise verwendet. Andernfalls kann es zu einem Speicherverlust kommen.
Das Schlüsselwort Using
sorgt dafür, dass .Dispose
aufgerufen wird, ohne dass Sie es explizit aufrufen müssen.
Zum Beispiel ohne Using
:
Dim sr As New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
sr.Dispose()
Jetzt mit Using
:
Using sr As New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
End Using '.Dispose is called here for you
Ein großer Vorteil bei der Using
ist, wenn eine Ausnahme ausgelöst wird, da sichergestellt ist, dass .Dispose
aufgerufen wird.
Folgendes berücksichtigen. Wenn eine Ausnahme ausgelöst wird, müssen Sie daran denken, .Dispose aufzurufen, müssen jedoch möglicherweise auch den Status des Objekts überprüfen, um sicherzustellen, dass Sie keinen Nullreferenzfehler erhalten.
Dim sr As StreamReader = Nothing
Try
sr = New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
Catch ex As Exception
'Handle the Exception
Finally
If sr IsNot Nothing Then sr.Dispose()
End Try
Ein using-Block bedeutet, dass Sie sich nicht daran erinnern müssen, und Sie können Ihr Objekt innerhalb des try
deklarieren:
Try
Using sr As New StreamReader("C:\foo.txt")
Dim line = sr.ReadLine
End Using
Catch ex As Exception
'sr is disposed at this point
End Try
1 Muss ich Dispose () immer für meine DbContext-Objekte aufrufen? Nee
Mehrere Objekte in einem deklarieren Using
Manchmal müssen Sie zwei Disposable
in einer Reihe erstellen. Es gibt eine einfache Möglichkeit, das Verschachteln Using
Blöcken zu vermeiden.
Dieser Code
Using File As New FileStream("MyFile", FileMode.Append)
Using Writer As New BinaryWriter(File)
'You code here
Writer.Writer("Hello")
End Using
End Using
kann in diese gekürzt werden. Der Hauptvorteil ist, dass Sie eine Einrückungsstufe erhalten:
Using File As New FileStream("MyFile", FileMode.Append), Writer As New BinaryWriter(File)
'You code here
Writer.Writer("Hello")
End Using