Compartilhar via


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

Fornece uma sintaxe conveniente que garante o uso correto de 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 os recursos não gerenciados (nesse identificadores de arquivo de maiúsculas 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 o 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 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 ocorrer uma exceção, enquanto você está chamando métodos no objeto. Você pode obter o mesmo resultado colocar o objeto em um bloco try e, em seguida, chamando 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ários objetos podem ser usados com um using instrução, mas eles devem ser declarados dentro do using instrução, como 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 declaração, mas isso não é um melhor prática. 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 ser totalmente inicializado. Se você tentar usar o objeto fora do using Bloquear, risco causando uma exceção ser acionada. Por esse motivo, é geralmente melhor instanciar o objeto do 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 C# Language Specification A especificação de linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Referência

C# Keywords

usando a diretiva (referência de C#)

Implementando finalizar e Dispose para limpeza de recursos não gerenciados

Conceitos

C# Programming Guide

Coleta de Lixo

Implementando um método Dispose

Outros recursos

C# Reference