2009-02-04 6 views
14
using (FileStream fileStream = new FileStream(path)) 
    { 
    // do something 
    } 

Jetzt weiß ich, das unter Verwendung von Mustern eine Implementierung von IDisposable ist, nämlich, dass ein Try/Catch/finally eingerichtet ist und Entsorgen auf dem Objekt aufgerufen wird. Meine Frage ist, wie die Close-Methode behandelt wird.Einweg Mit Pattern

MSDN sagt, dass es nicht aufgerufen wird, aber ich habe sonst gelesen.

Ich weiß, dass der FileStream vererbt von Stream, der here erklärt wird. Nun heißt es, Close() nicht zu überschreiben, weil es von Dispose() aufgerufen wird.

So rufen einige Klassen nur Close() in ihrer Dispose() -Methode auf oder ruft der Aufruf Close() auf?

Antwort

18

Die using Aussage nur kennt Dispose(), aber Stream.Dispose Anrufe Close(), wie documented in MSDN:

Beachten Sie, dass aufgrund der Rückwärts Kompatibilitätsanforderungen, diese Implementierung Methode des von für die die empfohlene Führung unterscheidet Muster entsorgen. Diese Methode ruft schließen, die dann ruft Stream.Dispose (Boolean).

+1

aww verdammt, ich habe geschlafen –

+0

In Ordnung, das ist, was ich von der Dokumentation dachte. Danke Jon. –

+2

@George: Meinst du nicht Skeeted? –

7

mit Anrufen Entsorgen() nur. Die Dispose() -Methode kann Close() aufrufen, wenn dies so implementiert ist.

1

Ich glaube nicht, dass die Verwendung ruft Close(), es hätte keine Möglichkeit zu wissen, dass es diese bestimmte Funktion aufrufen sollte. Also muss es angerufen werden, und das wiederum ruft an.

0

In .Net Klassen Close() rufen Dispose(). Do solltest das auch machen.

2

Schließen() ist nicht Teil der IDisposable-Schnittstelle, so dass die Verwendung keine Möglichkeit hat zu wissen, ob es aufgerufen werden soll oder nicht. Die Verwendung ruft nur Dispose() auf, aber intelligent entworfene Objekte schließen sich selbst in der Dispose() -Methode.

Verwandte Themen