O que é o C# usando o bloco e por que devo usá -lo? [duplicado
-
03-07-2019 - |
Pergunta
Esta pergunta já tem uma resposta aqui:
- Quais são os usos de "usar" em C# 29 respostas
Qual é o objetivo do bloco de uso em C#? Como é diferente de uma variável local?
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.