Instructie gebruiken (Visual Basic)
Declareert het begin van een Using
blok en verkrijgt desgewenst de systeembronnen die door de blokbesturingselementen worden gebruikt.
Syntaxis
Using { resourcelist | resourceexpression }
[ statements ]
End Using
generator
Term | Definitie |
---|---|
resourcelist |
Vereist als u niet levert resourceexpression . Lijst met een of meer systeemresources die door deze Using blokbesturingselementen worden gescheiden door komma's. |
resourceexpression |
Vereist als u niet levert resourcelist . Verwijzingsvariabele of expressie die verwijst naar een systeemresource die door dit Using blok wordt beheerd. |
statements |
Optioneel. Blok met instructies die door het Using blok worden uitgevoerd. |
End Using |
Vereist. Hiermee wordt de definitie van het blok beëindigd en worden alle resources verwijderd die door het Using blok worden bestuurd. |
Elke resource in het resourcelist
onderdeel heeft de volgende syntaxis en onderdelen:
resourcename As New resourcetype [ ( [ arglist ] ) ]
– of –
resourcename As resourcetype = resourceexpression
resourcelijstonderdelen
Term | Definitie |
---|---|
resourcename |
Vereist. Verwijzingsvariabele die verwijst naar een systeemresource die door de Using blokbesturingselementen wordt gebruikt. |
New |
Vereist als de Using instructie de resource verkrijgt. Als u de resource al hebt verkregen, gebruikt u het tweede syntaxis-alternatief. |
resourcetype |
Vereist. De klasse van de resource. De klasse moet de IDisposable interface implementeren. |
arglist |
Optioneel. Lijst met argumenten die u doorgeeft aan de constructor om een exemplaar van resourcetype . Zie de lijst met parameters. |
resourceexpression |
Vereist. Variabele of expressie die verwijst naar een systeemresource die voldoet aan de vereisten van resourcetype . Als u het tweede syntaxis-alternatief gebruikt, moet u de resource verkrijgen voordat u het besturingselement doorgeeft aan de Using instructie. |
Opmerkingen
Soms is voor uw code een onbeheerde resource vereist, zoals een bestandshandler, een COM-wrapper of een SQL-verbinding. Een Using
blok garandeert de verwijdering van een of meer dergelijke resources wanneer uw code ermee klaar is. Hierdoor zijn ze beschikbaar voor andere code die moet worden gebruikt.
Beheerde resources worden verwijderd door de .NET Framework garbage collector (GC) zonder extra codering aan uw kant. U hebt geen blok nodig Using
voor beheerde resources. U kunt echter nog steeds een Using
blok gebruiken om de verwijdering van een beheerde resource af te dwingen in plaats van te wachten op de garbagecollector.
Een Using
blok heeft drie onderdelen: aanschaf, gebruik en verwijdering.
Overname betekent het maken van een variabele en het initialiseren ervan om te verwijzen naar de systeemresource. De
Using
instructie kan een of meer resources verkrijgen of u kunt precies één resource verkrijgen voordat u het blok invoert en aan deUsing
instructie levert. Als u invoertresourceexpression
, moet u de resource verkrijgen voordat u de controle doorgeeft aan deUsing
instructie.Gebruik betekent toegang tot de resources en het uitvoeren van acties. De instructies tussen
Using
enEnd Using
vertegenwoordigen het gebruik van de resources.Verwijdering betekent het aanroepen van de Dispose methode op het object in
resourcename
. Hierdoor kan het object de resources ervan op schone wijze beëindigen. DeEnd Using
instructie verwijdert de resources onder het besturingselement van hetUsing
blok.
Gedrag
Een Using
blok gedraagt zich als een Try
...Finally
constructie waarin het Try
blok gebruikmaakt van de resources en het Finally
blok wordt verwijderd. Hierdoor garandeert het Using
blok de verwijdering van de resources, ongeacht hoe u het blok verlaat. Dit geldt zelfs in het geval van een onverwerkte uitzondering, met uitzondering van een StackOverflowException.
Het bereik van elke resourcevariabele die door de Using
instructie is verkregen, is beperkt tot het Using
blok.
Als u meer dan één systeemresource in de Using
instructie opgeeft, is het effect hetzelfde als als als u een geneste blok in een andere hebt genest Using
.
Als resourcename
dat het is Nothing
, wordt er geen aanroep gedaan Dispose en wordt er geen uitzondering gegenereerd.
Verwerking van gestructureerde uitzonderingen binnen een using-blok
Als u een uitzondering moet afhandelen die zich binnen het Using
blok kan voordoen, kunt u er een volledige Try
...Finally
constructie aan toevoegen. Als u de case wilt afhandelen waarin de instructie niet lukt bij het Using
verkrijgen van een resource, kunt u testen of resourcename
dat wel het geval is Nothing
.
Verwerking van gestructureerde uitzonderingen in plaats van een blok gebruiken
Als u meer controle nodig hebt over de aanschaf van de resources of als u extra code in het Finally
blok nodig hebt, kunt u het Using
blok herschrijven als een Try
...Finally
constructie. In het volgende voorbeeld ziet u skelet Try
- en Using
constructies die gelijkwaardig zijn in de verwerving en verwijdering van resource
.
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
Notitie
De code in het Using
blok mag het object resourcename
niet toewijzen aan een andere variabele. Wanneer u het Using
blok afsluit, wordt de resource verwijderd en heeft de andere variabele geen toegang tot de resource waarnaar deze verwijst.
Opmerking
In het volgende voorbeeld wordt een bestand gemaakt met de naam log.txt en worden twee regels tekst naar het bestand geschreven. In het voorbeeld wordt hetzelfde bestand ook gelezen en worden de regels met tekst weergegeven:
Omdat de interface door de TextWriter en TextReader klassen wordt geïmplementeerd IDisposable , kan de code instructies gebruiken Using
om ervoor te zorgen dat het bestand correct wordt gesloten na de schrijf- en leesbewerkingen.
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