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 doUsing
příkazu. Pokud zadáteresourceexpression
, musíte získat prostředek před předáním řízení doUsing
příkazu.Použití znamená přístup k prostředkům a provádění akcí s nimi. Příkazy mezi
Using
prostředky aEnd 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říkazEnd Using
odstraní prostředky pod kontrolouUsing
bloku.
Chování
Blok Using
se chová jako Try
konstrukce,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í Try
Finally
... 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 Try
konstrukci ...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