why statement net namespace c# dispose using using-statement

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:


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.