¿Qué es el bloque Uso de C# y por qué debería usarlo? [duplicar]
¿Cuál es el propósito del Using
bloque en C#? ¿En qué se diferencia de una variable local?
Si el tipo implementa IDisposable, elimina automáticamente ese tipo.
Dado:
public class SomeDisposableType : IDisposable
{
...implmentation details...
}
Estos son equivalentes:
SomeDisposableType t = new SomeDisposableType();
try {
OperateOnType(t);
}
finally {
if (t != null) {
((IDisposable)t).Dispose();
}
}
using (SomeDisposableType u = new SomeDisposableType()) {
OperateOnType(u);
}
El segundo es más fácil de leer y mantener.
Desde C# 8 hay una nueva sintaxisusing
que puede hacer que el código sea más legible:
using var x = new SomeDisposableType();
No tiene un { }
bloque propio y el alcance del uso es desde el punto de declaración hasta el final del bloque en el que se declara. Esto significa que puedes evitar cosas como:
string x = null;
using(var someReader = ...)
{
x = someReader.Read();
}
Y tienes esto:
using var someReader = ...;
string x = someReader.Read();
Using
llamadas Dispose()
después using
de abandonar el bloque, incluso si el código genera una excepción.
Por lo general, se usa using
para clases que requieren limpieza después de ellas, como IO.
Entonces, este usando el bloque:
using (MyClass mine = new MyClass())
{
mine.Action();
}
haría lo mismo que:
MyClass mine = new MyClass();
try
{
mine.Action();
}
finally
{
if (mine != null)
mine.Dispose();
}
Usar using
es mucho más corto y más fácil de leer.
Desde MSDN:
C#, a través del tiempo de ejecución de lenguaje común (CLR) de .NET Framework, libera automáticamente la memoria utilizada para almacenar objetos que ya no son necesarios. La liberación de la memoria no es determinista; La memoria se libera cada vez que CLR decide realizar la recolección de basura. Sin embargo, normalmente es mejor liberar recursos limitados, como identificadores de archivos y conexiones de red, lo más rápido posible.
La declaración de uso permite al programador especificar cuándo los objetos que usan recursos deben liberarlos. El objeto proporcionado a la declaración de uso debe implementar la interfaz IDisposable. Esta interfaz proporciona el método Dispose, que debería liberar los recursos del objeto.
En otras palabras, la using
declaración le dice a .NET que libere el objeto especificado en el using
bloque una vez que ya no sea necesario.
La declaración de uso se utiliza para trabajar con un objeto en C# que implementa la IDisposable
interfaz.
La IDisposable
interfaz tiene un método público llamado Dispose
que se utiliza para deshacerse del objeto. Cuando usamos la declaración de uso, no necesitamos eliminar explícitamente el objeto en el código, la declaración de uso se encarga de ello.
using (SqlConnection conn = new SqlConnection())
{
}
Cuando usamos el bloque anterior, internamente el código se genera así:
SqlConnection conn = new SqlConnection()
try
{
}
finally
{
// calls the dispose method of the conn object
}
Para obtener más detalles, lea: Comprensión de la declaración 'using' en C# .