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)