Share via


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 de Using instructie levert. Als u invoert resourceexpression, moet u de resource verkrijgen voordat u de controle doorgeeft aan de Using instructie.

  • Gebruik betekent toegang tot de resources en het uitvoeren van acties. De instructies tussen Using en End 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. De End Using instructie verwijdert de resources onder het besturingselement van het Using 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

Zie ook