StreamReader クラスには close メソッドと dispose メソッドの両方があります。すべてのリソースをクリーンアップするにはどのメソッドを呼び出す必要があるかを知りたいです。
using ブロックを使用する場合、dispose メソッドが呼び出されると思います。すべてのリソースをクリーンアップするだけで十分でしょうか。
ベストアンサー1
ブロックはインスタンスをusing
呼び出します。一般的に、型が の場合は、それをスコープ内に配置する必要があり ます。Dispose()
StreamReader
IDisposable
using
編集:Close()
Reflector を使用したの実装を見るとStreamReader
、 が呼び出されていることがわかりますDispose(true)
。したがって、スコープを使用していない場合はusing
、Close()
手動で を呼び出すことは、この特定のケースで を呼び出すことと同じになります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);
}
}
}