Compartilhar via


usando instrução (referência de C#)

Fornece uma sintaxe conveniente que garante o uso correto dos IDisposable objetos.

Exemplo

O exemplo a seguir mostra como usar a instrução.

using (Font font1 = new Font("Arial", 10.0f)) 
{
    byte charset = font1.GdiCharSet;
}

Comentários

Filee Font são exemplos de tipos gerenciados que acessam recursos não gerenciados (neste identificadores de arquivos de case e contextos de dispositivo).Há muitos outros tipos de recursos não gerenciados e tipos de biblioteca de classes que encapsulam-los.Todos os tipos de tais devem implementar a IDisposable interface.

Como regra, quando você usa um IDisposable de objeto, você deve declarar e instanciá-la em um using instrução.O using chamadas de instrução do Dispose método no objeto da maneira correta e (quando você usá-lo, conforme mostrado anteriormente) ele também faz com que o objeto em si para fora do escopo assim que Dispose é chamado.Dentro do using bloco, o objeto é somente leitura e não pode ser modificado ou reatribuída.

O using instrução garante que Dispose é chamado, mesmo se ocorre uma exceção enquanto você está chamando métodos no objeto.Você pode obter o mesmo resultado, colocando o objeto em um bloco try e depois chamar de Dispose em um bloco finally; Na verdade, isso é como o using instrução é traduzida pelo compilador.O exemplo de código anterior se expande para o seguinte código em tempo de compilação (Observe as chaves extra para criar o escopo limitado para o objeto):

{
  Font font1 = new Font("Arial", 10.0f);
  try
  {
    byte charset = font1.GdiCharSet;
  }
  finally
  {
    if (font1 != null)
      ((IDisposable)font1).Dispose();
  }
}

Várias instâncias de um tipo podem ser declaradas em um using instrução, como mostrado no exemplo a seguir.

using (Font font3 = new Font("Arial", 10.0f),
            font4 = new Font("Arial", 10.0f))
{
    // Use font3 and font4.
}

Você pode instanciar o objeto de recurso e, em seguida, passar a variável para o using instrução, mas isso não é uma prática recomendada.Nesse caso, o objeto permanece no escopo depois que o controle saia do using bloquear, embora ele provavelmente não terá mais acesso a seus recursos não gerenciados.Em outras palavras, ele será não mais totalmente inicializado.Se você tentar usar o objeto fora do using bloquear, risco fazendo com que uma exceção seja lançada.Por esse motivo, é geralmente melhor instanciar o objeto na using instrução e limitar seu escopo para o using bloco.

            Font font2 = new Font("Arial", 10.0f);
            using (font2) // not recommended
            {
                // use font2
            }
            // font2 is still in scope
            // but the method call throws an exception
            float f = font2.GetHeight(); 


Especificação da linguagem C#

Para obter mais informações, consulte Especificação de linguagem do C# A especificação da linguagem é a fonte definitiva para a sintaxe e o uso da linguagem C#.

Consulte também

Referência

Palavras-chave C#

usando diretiva (referência de C#)

Conceitos

Guia de programação do C#

Implementando um método Dispose

Outros recursos

Referência de C#

Coleta de Lixo