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
usando a diretiva (referência de C#)
Implementando finalizar e Dispose para limpeza de recursos não gerenciados
Conceitos
Implementando um método Dispose