FrankyBoy69 hat folgendes geschrieben : |
Und dann halt im Destruktor geschlossen werden muss. |
Nein, der Desktruktor ist allein zum Aufräumen von
unmanaged Ressourcen da. Wie du gesehen hast,
darfst du darin nicht einmal auf managed Ressourcen zugreifen, da die Reihenfolge der Finalize-Aufrufe unbestimmt ist.
Solange du also nur andere CLR-Klassen wie den StreamWriter benutzt, brauchst du überhaupt keinen Destruktor. Du
kannst dem Benutzer deiner Klasse aber helfen, knappe Ressourcen wie IO-Handles schneller (determiniert) freizugeben, indem du IDisposable implementierst und darin dann Dispose aller deiner managed Ressourcen aufrufst.
Edit: Es gibt noch das Pattern, dass eine Basisklasse IDisposable und einen Destruktor implementiert und beides an eine
protected override void Dispose(bool disposing) weiterleitet:
msdn.microsoft.com/e...ibrary/fs2xkftw.aspx. IMHO aber unnötig, solange keine unmanaged Ressourcen freigegeben werden sollen (auch nicht in Subklassen), auch wenn ich langsam selbst nicht mehr durchblicke

.