Compartir a través de


using (Instrucción, Referencia de C#)

Proporciona una sintaxis adecuada que garantiza el uso correcto de los objetos IDisposable.

Ejemplo

El ejemplo siguiente muestra cómo utilizar la instrucción using.

using (Font font1 = new Font("Arial", 10.0f)) 
{
    byte charset = font1.GdiCharSet;
}

Comentarios

File y Font son ejemplos de tipos administrados que obtienen acceso a recursos no administrados (en este caso, identificadores de archivo y contextos de dispositivo). Existen muchos más tipos de recursos no administrados y tipos de biblioteca de clases que los encapsulan. Todos estos tipos deben implementar la interfaz IDisposable.

Como norma, cuando utilice un objeto IDisposable, declárelo y cree instancias del mismo en una instrucción using. La instrucción using llama al método Dispose en el objeto de la forma correcta y, si se utiliza tal y como se ha explicado anteriormente, también hace que el propio objeto salga del ámbito en cuanto se llama a Dispose. Dentro del bloque using, el objeto es de sólo lectura y no puede modificarse ni reasignarse.

La instrucción using garantiza que se llame a Dispose, aunque se produzca una excepción mientras se llama a los métodos del objeto. Puede conseguir el mismo resultado colocando el objeto dentro de un bloque try y llamando a continuación a Dispose en un bloque finally; de hecho, esta es la forma en que el compilador traduce la instrucción using. El ejemplo de código anterior se extiende al siguiente código en tiempo de compilación (tenga en cuenta las llaves adicionales para crear el ámbito limitado del objeto):

{
  Font font1 = new Font("Arial", 10.0f);
  try
  {
    byte charset = font1.GdiCharSet;
  }
  finally
  {
    if (font1 != null)
      ((IDisposable)font1).Dispose();
  }
}

Se pueden declarar varias instancias de un tipo en una instrucción using, como se muestra en el ejemplo siguiente.

using (Font font3 = new Font("Arial", 10.0f),
            font4 = new Font("Arial", 10.0f))
{
    // Use font3 and font4.
}

Puede crear instancias del objeto de recursos y, a continuación, pasar la variable a la instrucción using, pero no es un procedimiento recomendado. En este caso, el objeto permanece en el ámbito después de que el control abandone el bloque using, aunque es probable que ya no tenga acceso a sus recursos no administrados. En otras palabras, ya no se inicializará completamente. Si intenta utilizar el objeto fuera del bloque using, se arriesga a que se inicie una excepción. Por esta razón, suele ser mejor crear instancias del objeto en la instrucción using y limitar su ámbito al bloque using.

            Font font2 = new Font("Arial", 10.0f);
            using (font2) // not recommended
            {
                // use font2
            }
            // font2 is still in scope
            // but the method call throws an exception
            float f = font2.GetHeight(); 


Especificación del lenguaje C#

Para obtener más información, vea la Especificación del lenguaje C#. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.

Vea también

Referencia

Palabras clave de C#

using (Directiva, Referencia de C#)

Implementar Finalize y Dispose para limpiar recursos no administrados

Conceptos

Guía de programación de C#

recolección de elementos no utilizados

Implementar un método Dispose

Otros recursos

Referencia de C#