Ich sende einen Stream zu Methoden zum Schreiben auf, und in diesen Methoden verwende ich ein binäres reader/wrtier. Wenn der Reader/Writer entsorgt wird, entweder durch using
oder wenn er nicht referenziert wird, ist der Stream ebenfalls geschlossen ??Wird der Stream über den Streamreader geschlossen?
Ich würde einen BinaryReader/Writer senden, aber ich benutze auch einen StreamReader (vielleicht sollte ich das umgehen. Ich benutze das nur für GetLine und ReadLine). Dies ist ziemlich mühsam, wenn es den Strom jedes Mal schließt, wenn ein Schreiber/Leser geschlossen wird.
oh gut, es geschieht nur, wenn Dispose aufrufen, nicht, wenn angeblich finalisieren. – Nefzen
@Nefzen: Das ist, weil es keine Garantie gibt, welche Reihenfolge Ihre Objekte finalisiert werden. Wenn sowohl der StreamReader als auch der zugrunde liegende Stream für die Finalisierung in Frage kommen, kann der GC den Stream zuerst finalisieren - dann hätte streamreader keinen Verweis auf den Stream. Aus diesem Grund können Sie nicht verwaltete Ressourcen nur innerhalb einer endgültigen Version freigeben (z. B. schließt ein FileStream seine Windows-Dateikennung in seiner endgültigen Version). Oh, und natürlich, wenn Sie nie entsorgen, wird der Strom schließlich gesammelt (und die Datei geschlossen). Es ist nur eine sehr schlechte Übung, einen Stream nicht zu entsorgen. – JMarsch
Diese Verschachtelung bewirkt, dass der VS-Code-Analyzer sich beschweren kann: 'CA2202: Microsoft.Usage: Objekt 'stream' kann in der Methode '...' mehrfach entsorgt werden. Um das Generieren einer System.ObjectDisposedException zu vermeiden, sollten Sie Dispose nicht mehrmals für ein Objekt aufrufen. Soll das einfach ignoriert werden? Ich habe bis jetzt keine Ausnahmen bekommen ... –