Pergunta

Esta pergunta já tem uma resposta aqui:

Qual é o objetivo do bloco de uso em C#? Como é diferente de uma variável local?

Foi útil?

Solução

Se o tipo implementa idispossáveis, ele o descarta automaticamente.

Dado:

public class SomeDisposableType : IDisposable
{
   ...implmentation details...
}

Estes são equivalentes:

SomeDisposableType t = new SomeDisposableType();
try {
    OperateOnType(t);
}
finally {
    if (t != null) {
        ((IDisposable)t).Dispose();
    }
}

using (SomeDisposableType u = new SomeDisposableType()) {
    OperateOnType(u);
}

O segundo é mais fácil de ler e manter.

Outras dicas

Using chamadas Dispose() depois de using-Block é deixado, mesmo que o código jogue uma exceção.

Então você costuma usar using Para as aulas que exigem limpeza depois delas, como io.

Então, isso usando o bloco:

using (MyClass mine = new MyClass())
{
  mine.Action();
}

faria o mesmo que:

MyClass mine = new MyClass();
try
{
  mine.Action();
}
finally
{
  if (mine != null)
    mine.Dispose();
}

Usando using é muito mais curto e mais fácil de ler.

De msdn:

C#, através da estrutura .NET Framework Common Runtime RunTime (CLR), libera automaticamente a memória usada para armazenar objetos que não são mais necessários. A liberação da memória não é determinística; A memória é liberada sempre que o CLR decide realizar a coleta de lixo. No entanto, geralmente é melhor liberar recursos limitados, como alças de arquivo e conexões de rede o mais rápido possível.

A instrução de uso permite que o programador especifique quando objetos que usam recursos devem liberá -los. O objeto fornecido à instrução USTING deve implementar a interface idisposlável. Essa interface fornece o método de disposição, que deve liberar os recursos do objeto.

Em outras palavras, o using a declaração diz ao .NET para liberar o objeto especificado no using Bloqueie quando não for mais necessário.

A instrução de uso é usada para trabalhar com um objeto em C# que implementa o IDisposable interface.

o IDisposable A interface tem um método público chamado Dispose que é usado para descartar o objeto. Quando usamos a instrução Usando, não precisamos descartar explicitamente o objeto no código, a instrução Using cuida dele.

using (SqlConnection conn = new SqlConnection())
{

}

Quando usamos o bloco acima, internamente o código é gerado assim:

SqlConnection conn = new SqlConnection() 
try
{

}
finally
{
    // calls the dispose method of the conn object
}

Para mais detalhes, leia: Compreendendo a instrução 'usando' em C#.

Observe também que o objeto instanciou via using é somente leitura dentro do bloco de uso. Consulte a referência oficial C# aqui.

A colocação de código em um bloco de uso garante que os objetos sejam descartados (embora não necessariamente coletados) assim que o controle deixar o bloco.

using (B a = new B())
{
   DoSomethingWith(a);
}

é equivalente a

B a = new B();
try
{
  DoSomethingWith(a);
}
finally
{
   ((IDisposable)a).Dispose();
}

É realmente apenas um açúcar sintático que não exige que você explique a explicação dos membros que implementam idispos.

A declaração de uso obtém um ou mais recursos, executa uma declaração e, em seguida, descarta o recurso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top