c# - 解放 - usingブロックで例外がスローされてもリソースは破棄されますか?




リソース 解放 とは (3)

可能な重複:
Using文の中でExceptionがスローされた場合でもDisposeメソッドは呼び出されますか?

データベースにアクセスするとき、私はたくさんのブロックをusingています。 疑問に思っていました - usingブロック内で例外をスローする必要がある場合、たとえブロックの終わりに達していなくても、必要なリソースはまだ破棄されますか? それとも、 catchブロックで手動で閉じる必要がありますか?


usingステートメントで定義されたリソースが破棄されました。これが、 usingが適している主な理由です。

usingステートメントは、オブジェクトのメソッドを呼び出している間に例外が発生した場合でも Disposeが呼び出されるようにします。 オブジェクトをtryブロック内に置き、次にDisposeをfinallyブロック内で呼び出すことによっても同じ結果を得ることができます。 実際、これはusing文がコンパイラによってどのように変換されるかです。
http://msdn.microsoft.com/en-us/library/yh598w02%28v=VS.100%29.aspx


あなたはそうしないでしょう。 finallyブロックでDisposeメソッドを呼び出してtry{}catch{}finally{}コンストラクションを使用する場合、 usingブロックは同じです。 とにかくそれは呼ばれるでしょう。


はい、使用ブロックのリソースは破棄されます。





using-statement