statement - using c# sqlconnection
¿La declaración de "uso" siempre desecha el objeto? (3)
¿La declaración de using
siempre desecha el objeto, incluso si hay una devolución o se lanza una excepción dentro de él? ES DECIR:
using (var myClassInstance = new MyClass())
{
// ...
return;
}
o
using (var myClassInstance = new MyClass())
{
// ...
throw new UnexplainedAndAnnoyingException();
}
No, no lo hace.
Pero eso no es culpa del using
declaración sin embargo. Es porque cómo los bloques finally
son manejados por CLR. Hay algunos casos que finally
bloques no se ejecutarán. Si tiene una excepción no controlada y si el CLR cree que ejecutar más código dará lugar a más errores, no ejecutará el método de Dispose
(porque no ejecutará el bloque final cuyo método de Dispose
se compila hasta ...). Por lo tanto, tenga mucho cuidado y no ponga su vida en la ejecución del método Dispose
.
Los otros casos que pueden causar que el método Dispose
no se ejecute se pueden enumerar como:
OutOfMemoryException
yException
Matando el proceso
Pérdida de potencia
Sí, ese es el punto. Se compila a:
SomeDisposableType obj = new SomeDisposableType();
try
{
// use obj
}
finally
{
if (obj != null)
((IDisposable)obj).Dispose();
}
Tenga cuidado con su terminología aquí; el objeto en sí no está desasignado. Se llama al método Dispose()
y, por lo general, se liberan los recursos no administrados.
Si el objeto implementa IDisposable, será llamado.
De usar la declaración (referencia de C #) por MSDN
Define un ámbito, fuera del cual se eliminará un objeto u objetos.
La declaración de uso permite al programador especificar cuándo los objetos que usan recursos deberían 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.