Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Declara o início de um Using bloco e, opcionalmente, adquire os recursos do sistema que o bloco controla.
Sintaxe
Using { resourcelist | resourceexpression }
[ statements ]
End Using
Partes
| Período | Definição |
|---|---|
resourcelist |
Necessário se você não fornecer resourceexpression. Lista de um ou mais recursos do sistema que este Using bloco controla, separados por vírgulas. |
resourceexpression |
Necessário se você não fornecer resourcelist. Variável de referência ou expressão referente a um recurso do sistema a ser controlado por este Using bloco. |
statements |
Opcional. Bloco de instruções que o Using bloco executa. |
End Using |
Obrigatório Encerra a definição do Using bloco e descarta todos os recursos que ele controla. |
Cada recurso na resourcelist parte tem a seguinte sintaxe e partes:
resourcename As New resourcetype [ ( [ arglist ] ) ]
-ou-
resourcename As resourcetype = resourceexpression
resourcelist Peças
| Período | Definição |
|---|---|
resourcename |
Obrigatório Variável de referência que se refere a um recurso do sistema que o Using bloco controla. |
New |
Obrigatório se a Using declaração adquirir o recurso. Se você já adquiriu o recurso, use a segunda alternativa de sintaxe. |
resourcetype |
Obrigatório A classe do recurso. A classe deve implementar a IDisposable interface. |
arglist |
Opcional. Lista de argumentos que você está passando para o construtor para criar uma instância de resourcetype. Consulte Lista de parâmetros. |
resourceexpression |
Obrigatório Variável ou expressão referente a um recurso do sistema que satisfaz os requisitos do resourcetype. Se você usar a segunda alternativa de sintaxe, deverá adquirir o recurso antes de passar o controle para a Using instrução. |
Observações
Às vezes, seu código requer um recurso não gerenciado, como um identificador de arquivo, um wrapper COM ou uma conexão SQL. Um Using bloco garante a eliminação de um ou mais desses recursos quando o seu código é terminado com eles. Isso os torna disponíveis para outros códigos usarem.
Os recursos gerenciados são descartados pelo coletor de lixo (GC) do .NET Framework sem qualquer codificação extra de sua parte. Você não precisa de um Using bloco para recursos gerenciados. No entanto, você ainda pode usar um Using bloco para forçar o descarte de um recurso gerenciado em vez de esperar pelo coletor de lixo.
Um Using bloco tem três partes: aquisição, uso e eliminação.
Aquisição significa criar uma variável e inicializá-la para se referir ao recurso do sistema. A
Usingdeclaração pode adquirir um ou mais recursos, ou você pode adquirir exatamente um recurso antes de entrar no bloco e fornecê-lo àUsingdeclaração. Se você fornecerresourceexpression, você deve adquirir o recurso antes de passar o controle para aUsinginstrução.Uso significa acessar os recursos e realizar ações com eles. As declarações entre
UsingeEnd Usingrepresentam o uso dos recursos.Eliminação significa chamar o Dispose método no objeto em
resourcename. Isso permite que o objeto encerre seus recursos de forma limpa. AEnd Usingdeclaração dispõe dos recursos sob oUsingcontrole do bloco.
Comportamento
Um Using bloco comporta-se como uma Tryconstrução emFinally que o Try bloco usa os recursos e o Finally bloco os descarta. Por conta disso, o Using bloco garante o descarte dos recursos, não importa como você saia do bloco. Isto é verdade mesmo no caso de uma exceção não tratada, exceto para um StackOverflowException.
O escopo de cada variável de recurso adquirida pela Using instrução é limitado ao Using bloco.
Se você especificar mais de um recurso do sistema na instrução, o efeito será o mesmo que se você aninhasse Using blocos um dentro do Using outro.
Se resourcename for Nothing, nenhuma chamada para Dispose é feita, e nenhuma exceção é lançada.
Tratamento estruturado de exceções dentro de um bloco de uso
Se você precisar lidar com uma exceção que possa ocorrer dentro do Using bloco, você pode adicionar uma construção ... completa TryFinally a ele. Se você precisar lidar com o caso em que a Using instrução não é bem-sucedida na aquisição de um recurso, você pode testar para ver se resourcename é Nothing.
Tratamento de exceções estruturadas em vez de um bloco de uso
Se você precisa de um controle mais fino sobre a aquisição dos recursos, ou você precisa de código adicional no Finally bloco, você pode reescrever o Using bloco como uma Tryconstrução ...Finally O exemplo a seguir mostra esqueleto Try e Using construções que são equivalentes na aquisição e descarte de 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
Observação
O código dentro do Using bloco não deve atribuir o objeto a resourcename outra variável. Quando você sai do Using bloco, o recurso é descartado e a outra variável não pode acessar o recurso para o qual ele aponta.
Exemplo
O exemplo a seguir cria um arquivo chamado log.txt e grava duas linhas de texto no arquivo. O exemplo também lê esse mesmo arquivo e exibe as linhas de texto:
Como as classes e implementam TextWriter a IDisposable interface, o código pode usar Using instruções para garantir que o arquivo seja fechado corretamente após as operações de TextReader gravação e leitura.
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