Instrução using (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 a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.
Consulte também
Referência
Diretiva using (Referência de C#)
Conceitos
Implementando um método Dispose