Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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
| termín | 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 |
Volitelný. 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
| termín | 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 |
Volitelný. 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
Usingmůž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 doUsingpříkazu. Pokud zadáteresourceexpression, musíte získat prostředek před předáním řízení doUsingpříkazu.Použití znamená přístup k prostředkům a provádění akcí s nimi. Příkazy mezi
Usingprostředky aEnd Usingpř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 Usingodstraní prostředky pod kontrolouUsingbloku.
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