Using – příkaz (Visual Basic)

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

Syntaxe

Using { resourcelist | resourceexpression }
    [ statements ]
End Using

Součástky

Pojem definice
resourcelist Vyžaduje se, pokud nezadáte resourceexpression. Seznam jednoho nebo více systémových prostředků, které tento Using ovládací prvek bloku odděluje čá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 řízen tímto Using blokem.
statements Nepovinné. Blok příkazů, které Using se blok spouští.
End Using Povinný: Ukončí definici Using bloku a odstraní všechny prostředky, které řídí.

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

resourcename As New resourcetype [ ( [ arglist ] ) ]

nebo

resourcename As resourcetype = resourceexpression

části resourcelist

Pojem definice
resourcename Povinný: Referenční proměnná odkazující na systémový prostředek, který Using řídí blok.
New Vyžaduje se, Using pokud příkaz získá prostředek. Pokud jste už prostředek získali, použijte druhou alternativu syntaxe.
resourcetype Povinný: Třída prostředku. Třída musí implementovat IDisposable rozhraní.
arglist Nepovinné. Seznam argumentů, které předáváte konstruktoru pro vytvoření instance resourcetype. Viz seznam parametrů.
resourceexpression Povinný: Proměnná nebo výraz odkazující na systémový prostředek, který splňuje požadavky .resourcetype Pokud použijete druhou alternativu syntaxe, musíte před předáním Using ovládacího prvku do příkazu získat prostředek.

Poznámky

Někdy váš kód vyžaduje nespravovaný prostředek, například popisovač souboru, obálku MODELU COM nebo připojení SQL. Blok Using zaručuje odstranění jednoho nebo více takových prostředků, jakmile s nimi kód skončí. Tím je zpřístupníte pro další kód, který se má použít.

Spravované prostředky jsou uvolněny uvolňováním paměti rozhraní .NET Framework (GC) bez jakéhokoli dalšího kódování na vaší straně. Pro spravované prostředky nepotřebujete Using blok. Blok ale můžete použít Using k vynucení odstranění spravovaného prostředku místo čekání na uvolňování paměti.

Blok Using má tři části: získání, využití a likvidaci.

  • Získání znamená vytvoření proměnné a inicializaci, která bude odkazovat na systémový prostředek. Příkaz Using může získat jeden nebo více prostředků, nebo můžete získat přesně jeden prostředek před zadáním bloku a zadat ho do Using příkazu. Pokud zadáte resourceexpression, musíte získat prostředek před předáním řízení do Using příkazu.

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

  • Odstranění znamená volání Dispose metody na objektu v resourcename. Objekt tak může čistě ukončit své prostředky. Příkaz End Using odstraní prostředky pod kontrolou Using bloku.

Chování

Blok Using se chová jako Trykonstrukce,Finally ve které Try blok využívá prostředky a Finally blok je odstraní. Z tohoto důvodu Using blok zaručuje odstranění prostředků bez ohledu na to, jak blok opustíte. To platí i v případě neošetřené výjimky s výjimkou .StackOverflowException

Rozsah každé proměnné prostředku získané příkazem Using je omezen na Using blok.

Pokud v Using příkazu zadáte více než jeden systémový prostředek, efekt je stejný, jako kdybyste jeden vnořeli Using bloky mezi sebou.

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

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

Pokud potřebujete zpracovat výjimku, která může nastat v Using bloku, můžete k ní přidat kompletní TryFinally ... konstrukci. Pokud potřebujete zpracovat případ, kdy Using příkaz není úspěšný při získání prostředku, můžete otestovat, jestli resourcename je Nothing.

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

Pokud potřebujete větší kontrolu nad získáním prostředků nebo potřebujete další kód v Finally bloku, můžete blok přepsat Using jako Trykonstrukci ...Finally . Následující příklad ukazuje kostry Try a Using konstrukce, které jsou ekvivalentní při získávání a likvidaci 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 objekt přiřazovat resourcename k jiné proměnné. Když blok ukončíte Using , prostředek se odstraní a druhá proměnná nemůže získat přístup k prostředku, na který odkazuje.

Příklad

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

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

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é