usando demonstrativo (referência translation from VPE for Csharp)

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

Exemplo

O exemplo a seguir mostra como usar o usando demonstrativo.

using (System.IO.StreamReader sr = new System.IO.StreamReader(@"C:\Users\Public\Documents\test.txt"))
{
    string s = null;
    while((s = sr.ReadLine()) != null)
    {
        Console.WriteLine(s);
    }
}

Comentários

File e Font são exemplos de tipos gerenciado que acessam recursos não gerenciado (neste identificadores de arquivo de maiúsculas e contextos de dispositivo). Há muitos outros tipos de recursos não gerenciados e tipos de bibliotecas de classe que encapsulam-los.Todos os tipos de tais devem implementar o IDisposable interface.

sistema autônomo regra, quando você usa um IDisposable o objeto, você deve declarar e criar uma instância de um using demonstrativo. The using demonstrativo chamadas a Dispose método no objeto de forma correta, e (quando você usá-lo, conforme mostrado anteriormente) ele também faz com que o objeto propriamente dito sairá do escopo, assim Dispose é chamado. Dentro de using bloco, o objeto é somente leitura e não pode ser modificado ou reatribuída.

The using demonstrativo 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 dentro de um bloco try e depois chamar de Dispose em um bloco finally, na verdade, isso é como o using demonstrativo é convertida pelo compilador. O exemplo de código anterior se expande para o seguinte código em time de compilar (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 demonstrativo, mas deve ser declarado dentro de using demonstrativo, sistema autônomo no exemplo a seguir:

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

Você pode criar uma instância do objeto de recurso e, em seguida, passar a variável à using demonstrativo, mas isso não é uma melhor prática. Nesse caso, o objeto permanece no escopo após o controle saia o using bloco Embora ele provavelmente não será tenha acesso a seus recursos não gerenciados. Em Outros palavras, ele não será inicializado totalmente.Se você tentar usar o objeto fora o using bloquear a risco causando uma exceção seja lançada. Por esse motivo, é geralmente melhor criar uma instância do objeto no using demonstrativo e limitar o 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 as seções a seguir no Especificação da linguagem C#:

  • 5.3.3.17 Usando instruções

  • 8.13 A demonstrativo using

Consulte também

Conceitos

Guia de Programação C#

Implementando um método Dispose

Referência

Palavras-chave C#

usando diretiva (translation from VPE for Csharp Reference)

Implementando Finalize e Dispose para Apagar up recursos não gerenciados

Outros recursos

Referência C#

Coleta de Lixo

Date

History

Motivo

Julho de 2008

Exemplo de código adicionado após o lançamento.

Correção de bug do conteúdo.