Share via


Istruzione using (Riferimenti per C#)

Fornisce una sintassi utile che garantisce l'utilizzo corretto degli oggetti IDisposable.

Esempio

Nell'esempio riportato di seguito viene illustrato come utilizzare l'istruzione using.

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

Note

File e Font sono esempi di tipi gestiti che accedono a risorse non gestite, in questo caso handle di file e contesti di dispositivo. Sono disponibili altri tipi di risorse e di librerie di classi non gestite che li incapsulano. Tutti questi tipi devono implementare l'interfaccia IDisposable.

Quando si utilizza un oggetto IDisposable, è di norma necessario dichiararlo e crearne un'istanza in un'istruzione using. L'istruzione using chiama il metodo Dispose sull'oggetto nel modo corretta e, quando utilizzata come illustrato in precedenza, fa in modo che l'oggetto stesso esca dall'ambito non appena viene chiamato il metodo Dispose. All'interno del blocco using, l'oggetto è di sola lettura e non può essere modificato né riassegnato.

L'istruzione using assicura che venga chiamato il metodo Dispose anche se si verifica un'eccezione mentre vengono chiamati metodi sull'oggetto. È possibile ottenere lo stesso risultato inserendo l'oggetto in un blocco try e chiamando il metodo Dispose in un blocco finally, in quanto l'istruzione using viene tradotta in questo modo dal compilatore. L'esempio di codice precedente viene esteso al codice riportato di seguito in fase di compilazione (le parentesi graffe aggiuntive creano l'ambito limitato per l'oggetto):

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

Più istanze di un tipo possono essere dichiarate in un'istruzione using, come illustrato nell'esempio riportato di seguito.

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

Benché sia possibile creare un'istanza dell'oggetto risorsa e passare la variabile all'istruzione using, non si tratta di una procedura consigliata. In questo caso, l'oggetto rimane in ambito dopo il rilascio del blocco using da parte del controllo, anche se probabilmente non ha più accesso alle proprie risorse non gestite. Ciò significa che non è più completamente inizializzato. Il tentativo di utilizzare l'oggetto all'esterno del blocco using potrebbe causare la generazione di un'eccezione. Per questo motivo, è in genere consigliabile creare un'istanza dell'oggetto nell'istruzione using e limitarne l'ambito al blocco 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(); 


Specifiche del linguaggio C#

Per ulteriori informazioni, vedere la Specifiche del linguaggio C#. La specifica del linguaggio è la fonte ufficiale per la sintassi e l'utilizzo di C#.

Vedere anche

Riferimenti

Parole chiave di C#

Direttiva using (Riferimenti per C#)

Implementazione dei metodi Finalize e Dispose per la pulizia delle risorse non gestite

Concetti

Guida per programmatori C#

Garbage Collection

Implementazione di un metodo Dispose

Altre risorse

Riferimenti per C#