Using — Instrukcja (Visual Basic)

Oświadcza na początku Using bloku i opcjonalnie nabywa zasobów systemowych, które kontroluje bloku.

Using { resourcelist | resourceexpression }
    [ statements ]
End Using

Części

Termin

Definicja

resourcelist

Wymagane, jeśli nie podasz resourceexpression.Lista jednego lub więcej zasobów systemowych, że ten Using blokowania formantów, oddzielonych przecinkami.

resourceexpression

Wymagane, jeśli nie podasz resourcelist.Odwołanie zmiennej lub wyrażenia odnoszące się do zasobu systemu kontrolowany przez to Using bloku.

statements

Opcjonalne.Blok instrukcji, Using blok działa.

End Using

Wymagane.Kończy definicję Using bloku i ma wszystkie zasoby, które kontroluje.

Każdy zasób w resourcelist część ma następującą składnię i części:

resourcename As New resourcetype [ ( [ arglist ] ) ]

-lub-

resourcename As resourcetype = resourceexpression

Części resourcelist

Termin

Definicja

resourcename

Wymagane.Zmienna odniesienia, która odnosi się do zasobów systemowych, Using blokowania formantów.

New

Wymagany, jeżeli Using instrukcja nabywa zasobu.Jeśli zasób już zostały nabyte, należy użyć drugi wariant składni.

resourcetype

Wymagane.Klasa zasobu.Klasa musi implementować IDisposable interfejsu.

arglist

Opcjonalne.Lista argumentów są przekazywanie do konstruktora w celu utworzenia wystąpienia resourcetype.Zobacz Lista parametrów (Visual Basic).

resourceexpression

Wymagane.Zmienna lub wyrażenie odnoszące się do zasobów systemu, spełniające wymogi resourcetype.Jeśli używasz drugi wariant składni, konieczne jest uzyskanie zasobu przed przekazaniem sterowania do Using instrukcji.

Uwagi

Czasami kodu wymaga niezarządzanym zasobem, dojście do pliku, otoki COM lub połączenie SQL.A Using bloku gwarantuje usuwania jednego lub więcej takich zasobów, po wykonaniu kodu z nimi.Udostępnia je na inny kod, aby użyć.

Zarządzane zasoby są usuwane przez moduł garbage collector.NET Framework (GC) bez dodatkowych kodowania z Twojej strony.Nie trzeba Using bloku dla zarządzanych zasobów.Jednak nadal można używać Using bloku do wymuszenia usuwania zarządzanego zasobu zamiast czekać na garbage collector.

A Using blok ma trzy części: nabycie, użytkowania i usuwania.

  • Nabycie oznacza utworzenie zmiennej i Inicjowanie to odnosi się do zasobów systemu.Using Instrukcja można nabyć jeden lub więcej zasobów, lub można nabyć dokładnie jeden zasób przed wejściem do bloku i dostarczenie jej do Using instrukcji.Jeśli podasz resourceexpression, zasób musi nabyć przed przekazaniem sterowania do Using instrukcji.

  • Użycie oznacza dostęp do zasobów i operacji wykonywanych z nimi.Instrukcji między Using i End Using stanowią obciążenie zasobów.

  • Usuwanie oznacza wywoływania Dispose metoda obiektu w resourcename.Dzięki temu obiekt czysto zakończyć jego zasobów.End Using Instrukcja zbywa zasobów w ramach Using bloku sterowania.

Zachowanie

A Using bloku zachowuje się jak Try...Finally budowy, w którym Try bloku korzysta z zasobów i Finally bloku usuwa je.W związku z tym Using bloku gwarantuje sprzedaży/likwidacji środków, bez względu na to, jak wyjścia bloku.Ta zasada obowiązuje nawet w przypadku nieobsłużony wyjątek, z wyjątkiem StackOverflowException.

Zakres zmiennej każdego zasobu, nabyte przez Using instrukcja jest ograniczona do Using bloku.

Jeśli określisz więcej niż jeden zasób systemu w Using instrukcji, efekt jest taki sam, jak gdyby można zagnieżdżać Using blokuje jeden w innym.

Jeśli resourcename jest Nothing, nie wezwanie do Dispose jest wykonane, i nie jest wyjątek.

Strukturalnej obsługi w bloku za pomocą wyjątków

Jeśli trzeba obsłużyć wyjątek, który może wystąpić w Using bloku, można dodać kompletne Try...Finally konstrukcji do niego.Jeśli potrzebujesz obsługi w przypadku gdy Using instrukcja nie jest skuteczne w przejmującej zasobu, można sprawdzić, czy resourcename jest Nothing.

Strukturalnej obsługi zamiast przy użyciu bloku wyjątków

Jeśli niezbędna jest ściślejsza kontrola nad nabycia zasobów lub konieczne jest dodatkowy kod w Finally bloku, można napisać ponownie Using blok jako Try...Finally konstrukcji.W poniższym przykładzie przedstawiono szkielet Try i Using konstrukcji, które są równoważne w nabywaniu i sprzedaży aktywów 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 

[!UWAGA]

Kod wewnątrz Using bloku nie należy przypisać obiekt w resourcename do innej zmiennej.Po zakończeniu Using blok, zasób jest usuwane, a inne zmiennej nie może uzyskać dostępu do zasobów, na które wskazuje.

Przykład

Poniższy przykład tworzy plik o nazwie log.txt i zapisuje dwóch wierszy tekstu w pliku.Przykład również odczytuje ten sam plik i wyświetla wiersze tekstu.

Bo TextWriter i TextReader Implementacja klasy IDisposable interfejs, można użyć kodu Using instrukcji w celu zapewnienia, że plik jest poprawnie zamknięty po zapisie i operacji odczytu.

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

Zobacz też

Zadania

Porady: usuwanie zasobu systemu (Visual Basic)

Informacje

IDisposable

Try...Catch...Finally — Instrukcja (Visual Basic)