O que é o bloco C# usando e por que devo usá-lo? [duplicado]
- Quais são os usos de "usar" em C# 29 respostas
Qual é o propósito do bloco de uso em C#? Como é diferente de uma variável local?
9 answers
Se o tipo implementa Idisposível, ele automaticamente o elimina.
Indicado:
public class SomeDisposableType : IDisposable
{
...implmentation details...
}
Estes são equivalentes:
SomeDisposableType t = new SomeDisposableType();
try {
OperateOnType(t);
}
finally {
t.Dispose();
}
using (SomeDisposableType u = new SomeDisposableType()) {
OperateOnType(u);
}
O segundo é mais fácil de ler e manter.
Using
chamadas Dispose()
Depois do using
-bloco é deixado, mesmo que o código lance uma exceção.
Normalmente usa using
para aulas que requerem limpeza depois delas, como IO.
using (MyClass mine = new MyClass())
{
mine.Action();
}
Faria o mesmo que:
MyClass mine = new MyClass();
try
{
mine.Action();
}
finally
{
if (mine != null)
mine.Dispose();
}
Usar using
é muito mais curto e mais fácil de ler.
De MSDN:
C#, através do quadro comum. net tempo de execução da linguagem (CLR), automaticamente liberta a memória usada para guardar objetos que já não são necessários. A libertação da memória é não-determinística; a memória é libertada sempre que a CLR decidir executar recolha. No entanto, é normalmente melhor para lançar limitado recursos como o arquivo lida e ligações de rede tão rapidamente quanto possivel.
A indicação de Utilização permite o programador a indicar quando os objectos que os recursos devem libertar o. O objecto fornecido à utilização declaração Interface idisposível. Interface fornece o método de eliminação, que deve libertar os recursos do objecto.
Por outras palavras, a instrução using
diz à.NET para libertar o objecto especificado no bloco {[[0]}, uma vez que já não seja necessário.
A declaração de utilização é usada para trabalhar com um objecto em C# que implementa a interface IDisposable
.
A interface IDisposable
tem um método público chamado Dispose
que é usado para eliminar o objecto. Quando usamos a declaração de uso, não precisamos descartar explicitamente o objeto no código, a declaração de uso 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, deve ler-se: Understanding a declaração de 'usar'em C # .
Colocar o código num bloco de uso garante que os objectos são eliminados (embora não necessariamente recolhidos) assim que o controlo sai do bloco.
Tome também nota que o objecto instanciado via using
só é lido dentro do bloco de Utilização. Consulte a referência oficial C# aqui .
using (B a = new B())
{
DoSomethingWith(a);
}
É equivalente a
B a = new B();
try
{
DoSomethingWith(a);
}
finally
{
((IDisposable)a).Dispose();
}
A declaração de Utilização obtém um ou mais recursos, executa uma declaração e, em seguida, dispõe do recurso.