Using – příkaz (Visual Basic)

Deklaruje začátek Using bloku a volitelně získá systémové prostředky, které blok ovládá.

Syntax

Using { resourcelist | resourceexpression }
    [ statements ]
End Using

Součásti

Označení Definice
resourcelist Vyžaduje se, pokud nezadáte resourceexpression . Seznam jednoho nebo více systémových prostředků, které tento Using blok ovládá, oddělený čárkami.
resourceexpression Vyžaduje se, pokud nezadáte resourcelist . Referenční proměnná nebo výraz odkazující na systémový prostředek, který má být ovládán pomocí tohoto Using bloku.
statements Nepovinný parametr. Blok příkazů, které Using blok spouští.
End Using Povinná hodnota. Ukončí definici Using bloku a uvolní všechny prostředky, které ovládací prvek IT ovládá.

Každý prostředek v resourcelist části má následující syntaxi a části:

resourcename As New resourcetype [ ( [ arglist ] ) ]

-nebo-

resourcename As resourcetype = resourceexpression

resourceList části

Označení Definice
resourcename Povinná hodnota. Referenční proměnná, která odkazuje na systémový prostředek, který Using blok ovládá.
New Vyžaduje se, pokud Using příkaz získá prostředek. Pokud jste už tento prostředek získali, použijte druhou alternativu syntaxe.
resourcetype Povinná hodnota. Třída prostředku Třída musí implementovat IDisposable rozhraní.
arglist Nepovinný parametr. Seznam argumentů, které předáte konstruktoru pro vytvoření instance resourcetype . Viz seznam parametrů.
resourceexpression Povinná hodnota. Proměnná nebo výraz odkazující na prostředek systému splňující požadavky resourcetype . Použijete-li druhou alternativu syntaxe, je nutné získat prostředek před předáním řízení Using příkazu.

Poznámky

Někdy váš kód vyžaduje nespravovaný prostředek, jako je popisovač souboru, Obálka COM nebo připojení SQL. UsingBlok garantuje vyřazení jednoho nebo více takových prostředků, když je kód dokončen. Díky tomu jsou k dispozici pro další kód pro použití.

Spravované prostředky jsou odstraněny nástrojem .NET Framework uvolňování paměti (GC) bez dalšího kódování na vaší straně. Nepotřebujete Using blok pro spravované prostředky. Nicméně můžete i nadále používat Using blok k vynucení odstranění spravovaného prostředku místo čekání na systém uvolňování paměti.

UsingBlok má tři části: pořízení, využití a vyřazení.

  • Akvizice znamená vytvoření proměnné a její inicializaci, aby odkazovala na systémový prostředek. UsingPříkaz může získat jeden nebo více prostředků, nebo můžete získat přesně jeden prostředek před vstupem do bloku a dodat ho do Using příkazu. Pokud zadáte resourceexpression , je nutné získat prostředek před předáním řízení Using příkazu.

  • Použití znamená přístup k prostředkům a provádění akcí s nimi. Příkazy Using a End Using reprezentují využití prostředků.

  • Vyřazení znamená volání Dispose metody u objektu v resourcename . Tím umožníte, aby objekt čistě ukončil své prostředky. End UsingPříkaz uvolní prostředky v rámci Using ovládacího prvku bloku.

Chování

UsingBlok se chová jako Try ... Finally konstrukce, ve které Try blok používá prostředky a Finally blok je vyřadí. Proto Using blok garantuje vyřazení prostředků bez ohledu na to, jak tento blok ukončujete. To platí i v případě neošetřené výjimky, s výjimkou StackOverflowException .

Rozsah všech proměnných prostředků získaných Using příkazem je omezen na Using blok.

Pokud zadáte více než jeden systémový prostředek v Using příkazu, efekt je stejný, jako by byl vnořený Using blok v rámci jiného.

Pokud resourcename je Nothing , žádné volání Dispose není provedeno a není vyvolána žádná výjimka.

Strukturované zpracování výjimek v bloku using

Pokud potřebujete zpracovat výjimku, ke které může dojít v rámci Using bloku, můžete Try do ní přidat úplnou... Finally konstrukce. Pokud potřebujete zpracovat případ, kde se Using příkaz při získání prostředku nezdařil, můžete otestovat a zjistit, zda resourcename je Nothing .

Strukturované zpracování výjimek namísto bloku using

Pokud potřebujete lepší kontrolu nad získáním prostředků nebo potřebujete další kód v Finally bloku, můžete tento Using blok přepsat jako Try konstrukce... Finally . Následující příklad ukazuje kostru Try a Using konstrukce, které jsou ekvivalentní při získávání a vyřazení 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

Poznámka

Kód uvnitř Using bloku by neměl přiřazovat objekt v resourcename jiné proměnné. Při ukončení Using bloku je prostředek vyřazen a druhá proměnná nemá přístup k prostředku, ke kterému odkazuje.

Příklad

Následující příklad vytvoří soubor s názvem log.txt a zapíše dva řádky textu do souboru. Příklad také přečte stejný soubor a zobrazí řádky textu:

Vzhledem k tomu, že TextWriter TextReader třídy a implementují IDisposable rozhraní, může kód použít příkazy, aby Using bylo zajištěno, že soubor je po operacích zápisu a čtení správně uzavřen.

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

Viz také