重複の可能性:
なぜ最後に C# を使用するのですか?
finally
C# では、句を持つことのポイントは何ですか?
例えば。
try {
// do something
}
catch (Exception exc)
{
// do something
}
// do something
とにかく最後のコードは実行されませんか?finally
ブロックのポイントは何ですか?
重複の可能性:
なぜ最後に C# を使用するのですか?
finally
C# では、句を持つことのポイントは何ですか?
例えば。
try {
// do something
}
catch (Exception exc)
{
// do something
}
// do something
とにかく最後のコードは実行されませんか?finally
ブロックのポイントは何ですか?
最後は、キャッチでさえ例外をスローするイベント用であり、さらに成功時と失敗時にコードを実行できます。最終的には常に実行されます。いつも。
アプリケーションがシステム レベルで強制終了された場合やコンピューターが爆発した場合を除きます。
finally は、前の 2 つのステートメントがアクティブ化されているかどうかに関係なく、ブロック内のすべてが実行されることを保証します。
良い例は、データベース リソースを解放することです。
例:
try
{
//Open a database connection
}
catch
{
//Catch exception, database connection failed
}
finally
{
//Release the opened database connection resources
}
前のコードの成功に関係なく、実行したいコードがあります。Try/Catch/Finally を使用すると、エラー処理の恩恵を受けることができます。
クリーンアップを実行する必要がある特定のオブジェクトがあるため、そうしないと、アプリケーションに問題が発生します。
常に使用される例は、SqlConnection の使用です。
SqlConnection conn = new SqlConnection(connString);
try
{
conn.Open();
throw new ArgumentException();
}
catch(SqlException ex)
{
}
この場合、SqlException を処理するため、SqlConnection は閉じられずに開いたままになりますが、ArgumentException がスローされます。finally ブロックを使用した場合、finally ブロック コードが実行されるため、これは発生しません。
try
{
conn.Open();
throw new ArgumentException();
}
catch(SqlException ex)
{
}
finally
{
conn.Dispose();
}
例外処理ブロックがさらに例外をスローした場合でも、finally
ブロックは例外がキャッチされたときに実行されることが保証されています。開いているファイル ハンドル、ネットワーク接続など、特定の種類のリソースをクリーンアップするためによく使用されます。
ここに良い例があります:
finally は、try が機能するか失敗した場合に、その中にあるものはすべて起動することを保証します。キャッチが発生するシナリオでは、最後にすべてが発生するという保証はありません//do something
。
例外がスローされたかどうかに関係なく、Finally ブロック内のコードは常に実行されます。例外ブロックに続くコードは、パスが catch で返された場合に実行される場合と実行されない場合があります。