return
finally ブロックではステートメントを使用できないため、どちらの例もコンパイルされません。これは、最初の状況はあり得ないことを意味し、実際に対処する必要はありません。
設計上、内でリターンしてtry
もfinally
ブロックが実行されます。
2 番目の状況については、一般に、はい -finally
ブロックが実行されます。ただし、を呼び出すEnvironment.FailFast
と、このメソッドは具体的に次のようになります。
アクティブな try/finally ブロックまたはファイナライザーを実行せずにプロセスを終了します。
その場合、finally ブロックは発生しません。Environment.Exit
(またはタイプ呼び出し)など、プロセスを「終了」する他のメソッドは、Application.Shutdown
通常、ブロック内のコードを実行することに注意してください。finally
編集すると、最初のfinally
ブロックが実行されます。
最初のケースでは、return
はブロックの実行 try
をトリガーします。finally
2 番目はEnvironment.Exit
すぐにプロセスを終了し、finally は実行されません。のドキュメントで指定されているように、状況 2 の catch ブロックも実行されないことに注意してください。Environment.Exit
Exit が try または finally ブロックから呼び出された場合、catch ブロック内のコードは実行されません。return ステートメントを使用すると、catch ブロック内のコードが実行されます。
あなたの最後の行については:
私の理解では、exit はシステム コールで、return は関数呼び出しです。
これは真実ではありません。 return
関数呼び出しではなく、制御フロー用 の言語指定のジャンプ ステートメントです。Environment.Exit
実際にはメソッド呼び出し (クラスExit
内のメソッド) です。Environment