閉じるか処分する 質問する

閉じるか処分する 質問する

StreamReader クラスには close メソッドと dispose メソッドの両方があります。すべてのリソースをクリーンアップするにはどのメソッドを呼び出す必要があるかを知りたいです。

using ブロックを使用する場合、dispose メソッドが呼び出されると思います。すべてのリソースをクリーンアップするだけで十分でしょうか。

ベストアンサー1

ブロックはインスタンスをusing呼び出します。一般的に、型が の場合は、それをスコープ内に配置する必要があり ます。Dispose()StreamReaderIDisposableusing

編集:Close()Reflector を使用したの実装を見るとStreamReader、 が呼び出されていることがわかりますDispose(true)。したがって、スコープを使用していない場合はusingClose()手動で を呼び出すことは、この特定のケースで を呼び出すことと同じになりますDispose()

protected override void Dispose(bool disposing)
{
    try
    {
        if ((this.Closable && disposing) && (this.stream != null))
        {
            this.stream.Close();
        }
    }
    finally
    {
        if (this.Closable && (this.stream != null))
        {
            this.stream = null;
            this.encoding = null;
            this.decoder = null;
            this.byteBuffer = null;
            this.charBuffer = null;
            this.charPos = 0;
            this.charLen = 0;
            base.Dispose(disposing);
        }
    }
}

おすすめ記事