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
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
- try/catch/finally, throw new e rethrow
- Eccezioni personalizzate; progettazione degli errori
- IDisposable, istruzione using