0Pricing
C# Academy · Lezione

IDisposable, istruzione using

Implementate IDisposable, usate l’istruzione using per una pulizia deterministica e confrontatela con try/finally manuale. Solo C# 6.

IDisposable, istruzione using è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 3 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 3 lezioni in totale.

Perché IDisposable e using

Obiettivo: liberare le risorse in modo deterministico.

  • Implementi IDisposable
  • Utilizzi l'istruzione using (C# 6)
  • La confronti con try/finally
  • Mantenga la pulizia semplice e sicura

Implementare IDisposable

Implementi IDisposable.Dispose per rilasciare le risorse (file, socket, handle). Renda l'operazione idempotente.

using System;

// Simple disposable that tracks whether it was cleaned up
public sealed class FakeConnection : IDisposable
{
  public bool IsOpen { get; private set; }

  public FakeConnection()
  {
    IsOpen = true;
    Console.WriteLine("Open");
  }

  public void Dispose()
  {
    if (IsOpen)
    {
      IsOpen = false;
      Console.WriteLine("Close");
    }
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    FakeConnection c = new FakeConnection();
    c.Dispose(); // manual cleanup
  }
}

Pattern try/finally

try/finally garantisce la pulizia, ma è prolisso e facile da dimenticare. L'istruzione using ne è una forma abbreviata.

using System;

public sealed class FakeConnection : IDisposable
{
  public void Dispose() { Console.WriteLine("Dispose called"); }
  public void Send(string msg) { Console.WriteLine("Send: " + msg); }
}

public class Program
{
  public static void Main(string[] args)
  {
    // Manual try/finally
    FakeConnection a = null;
    try
    {
      a = new FakeConnection();
      a.Send("A");
      throw new Exception("boom");
    }
    finally
    {
      if (a != null) a.Dispose(); // runs even on exception
    }

    // unreachable due to thrown exception in this demo
  }
}

Esempio dell'istruzione using

L'istruzione using racchiude un try/finally nascosto; Dispose viene chiamato al termine del blocco.

using System;

public sealed class FakeConnection : IDisposable
{
  public void Dispose() { Console.WriteLine("Dispose called"); }
  public void Work() { Console.WriteLine("Working"); }
}

public class Program
{
  public static void Main(string[] args)
  {
    try
    {
      using (FakeConnection c = new FakeConnection())
      {
        c.Work();
        throw new InvalidOperationException("oops");
      } // Dispose runs here automatically
    }
    catch (Exception)
    {
      Console.WriteLine("Handled");
    }
  }
}

I/O con using

La maggior parte dei tipi I/O implementa IDisposable. Utilizzi using affinché gli handle vengano chiusi tempestivamente.

using System;
using System.IO;

public class Program
{
  public static void Main(string[] args)
  {
    // Create a small temp file then read it
    string path = "demo.txt";
    File.WriteAllText(path, "hello");

    using (StreamReader r = new StreamReader(path))
    {
      string text = r.ReadToEnd();
      Console.WriteLine(text);
    } // r.Dispose() closes the file handle
  }
}

Suggerimenti e insidie di using

Suggerimenti:

  • Preferisca using alle chiamate manuali a Dispose.
  • Mantenga Dispose semplice e sicuro (se possibile, senza eccezioni).
  • Non utilizzi gli oggetti dopo averli sottoposti a Dispose.
  • Per più risorse, annidi i blocchi using per controllare l'ordine.

Garanzia dell'istruzione using

Verifica rapida: che cosa garantisce l'istruzione using per un oggetto IDisposable?

Riepilogo

Riepilogo: implementi IDisposable per le risorse e racchiuda il loro utilizzo in un blocco using, così da garantire la pulizia tramite un try/finally nascosto in C# 6.

Domande Frequenti

La lezione «IDisposable, istruzione using» è gratuita?

Sì — il testo completo di «IDisposable, istruzione using» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 3 lezioni in totale.

Cosa imparerò in «IDisposable, istruzione using»?

Implementate IDisposable, usate l’istruzione using per una pulizia deterministica e confrontatela con try/finally manuale. Solo C# 6. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C# Academy?

Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 3.

Quanto tempo richiede la lezione «IDisposable, istruzione using»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C# Academy?

Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. try/catch/finally, throw new e rethrow
  2. Eccezioni personalizzate; progettazione degli errori
  3. IDisposable, istruzione using
← Torna a C# Academy