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
Implementando um método Dispose
Referência
usando diretiva (translation from VPE for Csharp Reference)
Implementando Finalize e Dispose para Apagar up recursos não gerenciados
Outros recursos
Date |
History |
Motivo |
---|---|---|
Julho de 2008 |
Exemplo de código adicionado após o lançamento. |
Correção de bug do conteúdo. |