¿Qué es el bloque C # Using y por qué debería usarlo?

¿Cuál es el propósito del bloque de Uso en C #? ¿Cómo es diferente de una variable local?

    Si el tipo implementa IDisposable, lo descarta automáticamente.

    Dado:

    public class SomeDisposableType : IDisposable { ...implmentation details... } 

    Estos son equivalentes:

     SomeDisposableType t = new SomeDisposableType(); try { OperateOnType(t); } finally { t.Dispose(); } 

     using (SomeDisposableType u = new SomeDisposableType()) { OperateOnType(u); } 

    El segundo es más fácil de leer y mantener.

    Using llamadas Dispose() después de dejar el using -block, incluso si el código arroja una excepción.

    Por lo tanto, suele utilizarlo para las clases que requieren limpieza después de ellos, como IO.

    Entonces, este bloque de uso:

     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 es mucho más corto y fácil de leer.

    Desde MSDN:

    C #, a través del Common Language Runtime (CLR) de .NET Framework, libera automáticamente la memoria utilizada para almacenar objetos que ya no son necesarios. La liberación de memoria no es determinista; la memoria se libera siempre que el CLR decide realizar la recolección de basura. Sin embargo, generalmente es mejor liberar recursos limitados como manejadores de archivos y conexiones de red lo más rápido posible.

    La instrucción using le permite al progtwigdor especificar cuándo los objetos que usan recursos deberían liberarlos. El objeto proporcionado a la instrucción using debe implementar la interfaz IDisposable. Esta interfaz proporciona el método Dispose, que debería liberar los recursos del objeto.

    En otras palabras, la instrucción using indica a .NET que libere el objeto especificado en el bloque de using una vez que ya no sea necesario.

    La instrucción using se usa para trabajar con un objeto en C # que implementa la interfaz IDisposable .

    La interfaz IDisposable tiene un método público llamado Dispose que se usa para deshacerse del objeto. Cuando usamos la instrucción using, no necesitamos disponer explícitamente del objeto en el código, la instrucción using lo soluciona.

     using (SqlConnection conn = new SqlConnection()) { } 

    Cuando usamos el bloque de arriba, internamente el código se genera así:

     SqlConnection conn = new SqlConnection() try { } finally { // calls the dispose method of the conn object } 

    Para más detalles, lea: Entender la statement ‘using’ en C # .

    Colocar el código en un bloque de uso asegura que los objetos se eliminen (aunque no necesariamente se recopilen) tan pronto como el control abandone el bloque.

    También tenga en cuenta que el objeto instanciado mediante el using es de solo lectura dentro del bloque de uso. Consulte la referencia oficial de C # aquí .

     using (B a = new B()) { DoSomethingWith(a); } 

    es equivalente a

     B a = new B(); try { DoSomethingWith(a); } finally { ((IDisposable)a).Dispose(); } 

    En realidad, es solo un poco de azúcar sintético que no requiere explicidad llamada Disposición a los miembros que implementan IDisposable.

    La instrucción using obtiene uno o más recursos, ejecuta una instrucción y luego elimina el recurso.