ストリーム オブジェクトに対して Close() または Dispose() を呼び出す必要がありますか?
Stream、StreamReader、StreamWriter などのストリーム オブジェクト、 IDisposable インターフェイスを実装します。また、Close() と呼ばれるパブリック メソッドもあります。これらのメソッドの区別は混乱を招く可能性があります。
メソッドの実装
Reflector.NET を使用して、StreamWriter と StreamReader の Close() メソッドの実装を調べることができます。
// StreamWriter public override void Close() { this.Dispose(true); GC.SuppressFinalize(this); } // StreamReader public override void Close() { this.Dispose(true); }
の Dispose(bool 処分) メソッドStreamReader:
protected override void Dispose(bool disposing) { if ((this.Closable && disposing) && (this.stream != null)) { this.stream.Close(); } if (this.Closable && (this.stream != null)) { this.stream = null; base.Dispose(disposing); } }
StreamWriter と同様に、Close() メソッドは単純に内部で Dispose(true) を呼び出します。
Close() と Dispose() の同等性
コードから、両方の Close() を呼び出すことができることは明らかです。ストリームの動作に影響を与えることなく、ストリーム上で Dispose() を実行します。これらは同等のメソッドです。
ベスト プラクティス
Close() と Dispose() は交換可能ですが、次の使用をお勧めします。
結論
Close() と Dispose() のどちらを使用するかは、好みと読みやすさの問題です。どちらのメソッドもサポートされており、ストリーム オブジェクトに対して同等の機能を備えています。推奨される方法は、可能な場合は using ( ... ) { ... } を使用し、コードをわかりやすくするために必要な場合は明示的に Close() を呼び出すことです。
以上がClose() または Dispose(): ストリーム オブジェクトにはどちらのメソッドを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。