3

重複の可能性:
なぜ最後に C# を使用するのですか?

finallyC# では、句を持つことのポイントは何ですか?

例えば。

try {
        // do something
    }
catch (Exception exc)
    {
        // do something
    }
// do something

とにかく最後のコードは実行されませんか?finallyブロックのポイントは何ですか?

4

7 に答える 7

7

最後は、キャッチでさえ例外をスローするイベント用であり、さらに成功時と失敗時にコードを実行できます。最終的には常に実行されます。いつも。

アプリケーションがシステム レベルで強制終了された場合やコンピューターが爆発した場合を除きます。

于 2010-08-06T18:08:24.290 に答える
1

finally は、前の 2 つのステートメントがアクティブ化されているかどうかに関係なく、ブロック内のすべてが実行されることを保証します。

良い例は、データベース リソースを解放することです。

Try-Catch-Finally

例:

try
{
   //Open a database connection
}
catch
{
   //Catch exception, database connection failed
}
finally
{
   //Release the opened database connection resources
}
于 2010-08-06T18:09:17.300 に答える
0

前のコードの成功に関係なく、実行したいコードがあります。Try/Catch/Finally を使用すると、エラー処理の恩恵を受けることができます。

于 2010-08-06T18:08:07.547 に答える
0

クリーンアップを実行する必要がある特定のオブジェクトがあるため、そうしないと、アプリケーションに問題が発生します。

常に使用される例は、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();
}
于 2010-08-06T18:09:04.570 に答える
0

例外処理ブロックがさらに例外をスローした場合でも、finallyブロックは例外がキャッチされたときに実行されることが保証されています。開いているファイル ハンドル、ネットワーク接続など、特定の種類のリソースをクリーンアップするためによく使用されます。

ここに良い例があります:

http://dotnetperls.com/finally

http://www.csharp-station.com/Tutorials/lesson15.aspx

于 2010-08-06T18:09:05.157 に答える
0

finally は、try が機能するか失敗した場合に、その中にあるものはすべて起動することを保証します。キャッチが発生するシナリオでは、最後にすべてが発生するという保証はありません//do something

于 2010-08-06T18:10:13.563 に答える
0

例外がスローされたかどうかに関係なく、Finally ブロック内のコードは常に実行されます。例外ブロックに続くコードは、パスが catch で返された場合に実行される場合と実行されない場合があります。

于 2010-08-06T18:11:05.817 に答える