IDisposable, using-Anweisung
Implementieren Sie IDisposable, verwenden Sie die using-Anweisung für eine deterministische Bereinigung und vergleichen Sie sie mit einem manuellen try/finally. Nur für C# 6.
IDisposable, using-Anweisung ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.
Warum IDisposable + using
Ziel: Geben Sie Ressourcen deterministisch frei.
- Implementieren Sie IDisposable.
- Verwenden Sie die using-Anweisung (C# 6).
- Vergleichen Sie sie mit try/finally.
- Halten Sie die Bereinigung klein und sicher.
IDisposable implementieren
Implementieren Sie IDisposable.Dispose, um Ressourcen wie Dateien, Sockets und Handles freizugeben. Die Methode sollte idempotent sein.
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
}
}
try/finally-Muster
try/finally garantiert die Bereinigung, ist aber ausführlich und wird leicht vergessen. Die using-Anweisung ist eine Kurzform.
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
}
}
Demo zur using-Anweisung
Die using-Anweisung kapselt implizit try/finally; Dispose wird aufgerufen, wenn der Block endet.
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 mit using
Die meisten I/O-Typen implementieren IDisposable. Verwenden Sie using, damit Handles umgehend geschlossen werden.
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
}
}
Tipps und Fallstricke bei using
Tipps:
- Bevorzugen Sie using gegenüber manuellen Dispose-Aufrufen.
- Halten Sie Dispose kurz und sicher (wenn möglich ohne Ausnahmen).
- Verwenden Sie Objekte nicht mehr, nachdem sie freigegeben wurden.
- Verschachteln Sie bei mehreren Ressourcen die using-Blöcke, um die Reihenfolge zu steuern.
Garantie der using-Anweisung
Zusammenfassung
Zusammenfassung: Implementieren Sie IDisposable für Ressourcen und kapseln Sie deren Verwendung in einem using-Block, um in C# 6 die Bereinigung über ein implizites try/finally sicherzustellen.
Häufig gestellte Fragen
Ist die Lektion „IDisposable, using-Anweisung“ kostenlos?
Ja — der vollständige Text von „IDisposable, using-Anweisung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.
Was lerne ich in „IDisposable, using-Anweisung“?
Implementieren Sie IDisposable, verwenden Sie die using-Anweisung für eine deterministische Bereinigung und vergleichen Sie sie mit einem manuellen try/finally. Nur für C# 6. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C# Academy zu starten?
Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 3.
Wie lange dauert die Lektion „IDisposable, using-Anweisung“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?
Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- try/catch/finally, throw new und erneutes Auslösen
- Eigene Ausnahmen und Fehlerdesign
- IDisposable, using-Anweisung