私はこれを頭に入れようとしています。 this pageUsing
上の声明によると:どのようにC#を使用してTry-Finallyに翻訳する
usingステートメントは、廃棄は、あなたがオブジェクトのメソッドを呼び出している間に例外が発生した場合でも呼ばれていることを保証します。 tryブロックの中にオブジェクトを置き、finallyブロックでDisposeを呼び出すことで同じ結果を得ることができます。これは、usingステートメントがコンパイラによってどのように変換されるかです。
しかし、それは述べてthis pageについてTry-Finally
ブロックに:取り扱い例外以内
、関連するfinallyブロックが実行されることが保証されます。ただし、例外が未処理の場合、finallyブロックの実行は、例外の巻き戻し操作がどのようにトリガーされるかに依存します。
それでは、どのようUsing
文は、それが最終的に文を呼び出すことが保証されていないTry-Finally
に変換した場合、例外が発生した場合にDisposeメソッドを呼び出すことを保証することができますか?
私は正しいとは知らないので、答えはありませんが、catchステートメント内に未処理の例外があると、最終的に呼び出されないということがあります。しかし、使用して自動作成されたcatchステートメントでは、dispose()の呼び出しだけがあります。 – GendoIkari
@GendoIkari:いいえ、それは例外がどこからスローされているのかとは関係ありませんが、最終的に捕まえられるかどうかは関係ありません。最終的にキャッチ(処理)される例外はfinallyブロックを常に呼び出します(キャッチから別の例外がスローされた場合でも)。少し驚くべきことに、未処理の例外は、最終的に呼び出しを行うかどうかはしません。 – Cameron
@Cameron:ありがとう。私はあなたが最終的にそれを持っていれば例外を処理していると私は推測していたと思います。しかし、特定の例外のみを処理するキャッチを持つことは可能です。またはtry/finallyをキャッチせずに実行します。 – GendoIkari