Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Deklariert den Anfang eines Using Blocks und erwirbt optional die Systemressourcen, die der Block steuert.
Syntax
Using { resourcelist | resourceexpression }
[ statements ]
End Using
Bestandteile
| Begriff | Definition |
|---|---|
resourcelist |
Erforderlich, wenn Sie nicht angeben resourceexpression. Liste einer oder mehrerer Systemressourcen, die dieser Using Block steuert, getrennt durch Kommas. |
resourceexpression |
Erforderlich, wenn Sie nicht angeben resourcelist. Referenzvariable oder Ausdruck, der auf eine Systemressource verweist, die von diesem Using Block gesteuert werden soll. |
statements |
Wahlfrei. Block von Anweisungen, die der Using Block ausführt. |
End Using |
Erforderlich. Beendet die Definition des Using Blocks und entfernt alle ressourcen, die von ihr gesteuert werden. |
Jede Ressource im resourcelist Teil weist die folgende Syntax und Teile auf:
resourcename As New resourcetype [ ( [ arglist ] ) ]
-oder-
resourcename As resourcetype = resourceexpression
Ressourcenlistenteile
| Begriff | Definition |
|---|---|
resourcename |
Erforderlich. Referenzvariable, die auf eine Systemressource verweist, die vom Using Block gesteuert wird. |
New |
Erforderlich, wenn die Using Anweisung die Ressource erwirbt. Wenn Sie die Ressource bereits erworben haben, verwenden Sie die zweite Syntaxalternative. |
resourcetype |
Erforderlich. Die Klasse der Ressource. Die Klasse muss die IDisposable Schnittstelle implementieren. |
arglist |
Wahlfrei. Liste der Argumente, die Sie an den Konstruktor übergeben, um eine Instanz von resourcetype. Siehe Parameterliste. |
resourceexpression |
Erforderlich. Variable oder Ausdruck, die auf eine Systemressource verweist, die die Anforderungen von resourcetype. Wenn Sie die zweite Syntaxalternative verwenden, müssen Sie die Ressource abrufen, bevor Sie die Steuerung an die Using Anweisung übergeben. |
Bemerkungen
Manchmal erfordert Ihr Code eine nicht verwaltete Ressource, z. B. ein Dateihandle, einen COM-Wrapper oder eine SQL-Verbindung. Ein Using Block garantiert die Entsorgung einer oder mehrerer solcher Ressourcen, wenn Ihr Code mit ihnen fertig ist. Dadurch werden sie für andere Zu verwendende Code zur Verfügung gestellt.
Verwaltete Ressourcen werden vom .NET Framework Garbage Collector (GC) ohne zusätzliche Codierung auf Ihrem Teil verworfen. Sie benötigen Using keinen Block für verwaltete Ressourcen. Sie können jedoch weiterhin einen Using Block verwenden, um die Entsorgung einer verwalteten Ressource zu erzwingen, anstatt auf den Garbage Collector zu warten.
Ein Using Block hat drei Teile: Erwerb, Nutzung und Entsorgung.
Der Erwerb bedeutet, eine Variable zu erstellen und zu initialisieren, um auf die Systemressource zu verweisen. Die
UsingAnweisung kann eine oder mehrere Ressourcen abrufen, oder Sie können genau eine Ressource abrufen, bevor Sie den Block eingeben und derUsingAnweisung bereitstellen. Wenn Sie angebenresourceexpression, müssen Sie die Ressource abrufen, bevor Sie die Steuerung an dieUsingAnweisung übergeben.Die Verwendung bedeutet den Zugriff auf die Ressourcen und das Ausführen von Aktionen mit ihnen. Die Anweisungen zwischen
UsingundEnd Usingstellen die Verwendung der Ressourcen dar.Entsorgung bedeutet das Aufrufen der Dispose Methode für das Objekt in
resourcename. Dadurch kann das Objekt seine Ressourcen sauber beenden. DieEnd UsingAnweisung verworfen die Ressourcen unter dem Steuerelement desUsingBlocks.
Verhalten
Ein Using Block verhält sich wie eine Try...Finally Konstruktion, in der der Try Block die Ressourcen und den Finally Block entfernt. Aus diesem Gründen garantiert der Block die Using Entsorgung der Ressourcen, unabhängig davon, wie Sie den Block verlassen. Dies gilt auch bei einer unbehandelten Ausnahme, mit Ausnahme eines StackOverflowException.
Der Umfang jeder von der Using Anweisung erworbenen Ressourcenvariablen ist auf den Using Block beschränkt.
Wenn Sie mehr als eine Systemressource in der Using Anweisung angeben, entspricht der Effekt dem, wenn Sie Blöcke miteinander verschachtelt haben Using .
Wenn resourcename ja Nothing, wird kein Aufruf Dispose ausgeführt, und es wird keine Ausnahme ausgelöst.
Strukturierte Ausnahmebehandlung in einem Using-Block
Wenn Sie eine Ausnahme behandeln müssen, die innerhalb des Using Blocks auftreten kann, können Sie eine vollständige Try...Finally Konstruktion hinzufügen. Wenn Sie den Fall behandeln müssen, in dem die Using Anweisung beim Abrufen einer Ressource nicht erfolgreich ist, können Sie testen, ob resourcename dies der Fall ist Nothing.
Strukturierte Ausnahmebehandlung anstelle eines using-Blocks
Wenn Sie eine genauere Kontrolle über den Erwerb der Ressourcen benötigen oder zusätzlichen Code im Finally Block benötigen, können Sie den Using Block als ... TryFinally -Konstruktion neu schreiben. Das folgende Beispiel zeigt Skelett Try - und Using Konstruktionen, die im Erwerb und der Entsorgung resourcegleichwertig sind.
Using resource As New resourceType
' Insert code to work with resource.
End Using
' For the acquisition and disposal of resource, the following
' Try construction is equivalent to the Using block.
Dim resource As New resourceType
Try
' Insert code to work with resource.
Finally
If resource IsNot Nothing Then
resource.Dispose()
End If
End Try
Hinweis
Der Code innerhalb des Using Blocks sollte das Objekt resourcename nicht einer anderen Variablen zuweisen. Wenn Sie den Using Block beenden, wird die Ressource verworfen, und die andere Variable kann nicht auf die Ressource zugreifen, auf die sie verweist.
Beispiel
Im folgenden Beispiel wird eine Datei mit dem Namen log.txt erstellt und zwei Textzeilen in die Datei geschrieben. Das Beispiel liest auch dieselbe Datei und zeigt die Textzeilen an:
Da die TextWriter Schnittstelle und TextReader klassen die IDisposable Schnittstelle implementieren, kann der Code Anweisungen verwenden Using , um sicherzustellen, dass die Datei nach den Schreib- und Lesevorgängen ordnungsgemäß geschlossen wird.
Private Sub WriteFile()
Using writer As System.IO.TextWriter = System.IO.File.CreateText("log.txt")
writer.WriteLine("This is line one.")
writer.WriteLine("This is line two.")
End Using
End Sub
Private Sub ReadFile()
Using reader As System.IO.TextReader = System.IO.File.OpenText("log.txt")
Dim line As String
line = reader.ReadLine()
Do Until line Is Nothing
Console.WriteLine(line)
line = reader.ReadLine()
Loop
End Using
End Sub