Instrução Using (Visual Basic)

Declara o início de um bloco Using e opcionalmente adquire os recursos do sistema que o bloco controla.

Using { resourcelist | resourceexpression }
    [ statements ]
End Using

Partes

  • resourcelist
    Necessário se você não fornecer resourceexpression.Lista de um ou mais recursos do sistema que este bloco Using controla.

  • resourceexpression
    Necessário se você não fornecer resourcelist.Variável ou expressão de referência referem-se a um recurso do sistema controlado por este bloco Using.

  • statements
    Opcional.Bloco de instruções executadas pelo bloco Using.

  • End Using
    Obrigatório.Finaliza a definição do bloco Using e disponibiliza todos os recursos que ele controla.

Cada recurso na parte resourcelist possui a seguinte sintaxe e partes:

resourcename As New resourcetype [ ( [ arglist ] ) ]

- ou -

resourcename As resourcetype = resourceexpression

Partes resourcelist

  • resourcename
    Obrigatório.Variável que faz referência a um recurso do sistema que controlado pelo bloco Using.

  • New
    Necessário se a instrução Using adquire o recurso.Se você já tiver adquirido o recurso, use a segunda sintaxe alternativa.

  • resourcetype
    Obrigatório.A classe do recurso.A classe deve implementar a interface IDisposable.

  • arglist
    Opcional.Lista de argumentos que você está passando para o construtor para criar uma instância de resourcetype.SeeLista de parâmetros.

  • resourceexpression
    Obrigatório.Variável ou expressão referindo-se a um recurso de sistema que satisfaz os requisitos do resourcetype.Se você usar a segunda sintaxe alternativa, você deve adquirir o recurso antes de passar controle para a instrução Using.

Comentários

À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 bloco Usinggarante a disposição de um ou mais dos tais recursos quando seu código estiver finalizado com eles.Isso torna-os disponíveis para uso por outros códigos.

Recursos gerenciados são descartados pela coletor de lixo .NET Framework (GC) sem qualquer codificação extra de sua parte.Você não precisa de um bloco Usingpara recursos gerenciados.

A Using bloco tem três partes: aquisição, uso e descarte.

  • Aquisição significa criar uma variável e inicializá-la para se referir ao recurso do sistema.A instrução Using pode adquirir um ou mais recursos, ou você pode adquirir exatamente um recurso antes de inserir o bloco e fornece-lo para a instrução Using.Se você fornecer resourceexpression, você deve adquirir o recurso antes de passar controle para a instrução Using.

  • Usage significa acessar os recursos e executar ações com eles.As instruções entre Using e End Using representam o uso de recursos.

  • Descarte significa chamar o método Dispose no objeto em resourcename.Isso permite que o objeto libere corretamente seu recurso não gerenciado.A instrução End Using libera os recursos sob o bloco de controle Using.

Comportamento

Um bloco Usingse comporta como uma construção Try... Finally em que o bloco Try usa os recursos e o bloco Finally os libera.Devido a isso, o bloco Using garante a liberação dos recursos, não importando como você sai do bloco.Isso é verdadeiro mesmo no caso de uma exceção sem-tratamento, exceto por StackOverflowException.

O escopo de cada recurso variável adquirido pela instrução Using é limitado para o bloco Using.

Se você especificar mais de um recurso do sistema na instrução Using, o efeito é o mesmo como se você tivesse blocos Using aninhados, um dentro do outro.

Tratamento de exceções estruturado num bloco Using

Se você precisar manipular uma exceção que pode ocorrer dentro de um bloco Using, é possível adicionar uma construção Try ... Finally concluída a ela.Se você precisar manipular o caso em que a instrução Using não for bem-sucedida em adquirir um recurso, você pode testar para verificar se resourcename é Nothing.

Tratamento de Exceção Estruturado em ves de usar um bloco Using

Se você precisar exercer um melhor controle sobre a aquisição dos recursos, ou se precisar de código adicional no bloco Finally , você pode reescrever o bloco Using como uma construção Try. .. Finally.O exemplo a seguir mostra construções Try esqueleto e Using que são equivalentes na aquisição e liberação de resource.

Using resource As New resourceType 
    ' Insert code to work with resource.
End Using
' THE FOLLOWING TRY CONSTRUCTION IS EQUIVALENT TO THE USING BLOCK
Dim resource As New resourceType
Try 
    ' Insert code to work with resource.
Catch ex As Exception
    ' Insert code to process exception.
Finally 
    ' Insert code to do additional processing before disposing of resource.
    resource.Dispose()End Try
Observação:

O código dentro do Using bloco não deve atribuir o objeto no resourcename a outra variável. Quando você sai do bloco Using, o recurso é descartado, e a outra variável não pode acessar o recurso para o qual ela aponta.

Exemplo

O exemplo a seguir usa um bloco Usingpara adquirir uma nova fonte.Isso garante que o sistema chama o método Dispose sobre a fonte quando seu código sai do bloco.

Public Sub setbigbold(ByVal c As Control)
    Using nf As New System.Drawing.Font("Arial", 12.0F, _
        System.Drawing.FontStyle.Bold)

        c.Font = nf
        c.Text = "This is 12-point Arial bold"
    End Using
End Sub

Consulte também

Tarefas

Como: Descarte de um recurso do sistema

Referência

IDisposable

Try... Catch... Finally demonstrativo (Visual Basic)

System.Drawing

Font