VB.NET Tips Try…Catch…Finallyでエラー制御
ソフト開発において、避けて通れないのがエラー制御でしょう。
なんとしてでも、強制終了「ブチッ」……は、避けたい所です。
強制終了するにしても、なにかメッセージを提示して終了させたい。
VB.NET(.NET Framework)から導入された
Try…Catch…Finallyステートメントですが、VB6.0までのエラー処理の、On Error Gotoとは、かなり違います。
概念の違い
VB.NET
VB6.0
この、呼び方がすべてを物語っているように思えます。
と…、方向性が違う、違う、VB6.0との比較ではなく、VB.NET(.NET Framework)におけるTry…Catch…Finallyステートメントの使用方法をエントリーします。
必須文
- Try
- 先頭文。必須です。Tryブロックこれがなくては、始まりません。
- End Try
- 終端文。必須です。Try…Catch…Finally 構造の終わりを表します。
必ず、使用するのは、この2つ、”Try ~ End Try”。
後は、使用用途に応じて、使い分けていく必要があります。
ま、”If ~ End If”、”Sub ~ End Sub” と同じで、始まりと終わりを記述します。
オプション
省略可能なオプションブロックとして次ぎのものがあります。
Catchステートメントは複数のIf文があって、else文が単独であるって感じかな
。
- Catchブロック
-
複数の Catch ブロックを指定できます。
Try ブロックの処理中にエラーが発生すると、Catch ステートメントに処理が移り、そのエラーをCatchステートメントで処理できるか判定されます。 - Catchのみ(exception(エラー値)指定なし。)
- エラー値を判定しないのだから、当然、すべてのエラー処理はここで処理されます。
- exception使用
- exception(任意の変数)にエラーの値が入ります。
このエラーの値がtype(クラスフィルタの種類)と同じなのかどうか判定します。
- exception(エラー値)と同じエラーの場合、エラー処理を行います。
- exception(エラー値)と違うエラーの場合、エラー処理は行わず、このCatch文からは処理を抜けます。
Try ~ Catch の間でエラーが発生した場合、処理がCatchに移ります。
Catchには、exception (任意の変数)と、type(クラスフィルタの種類)のオプションがあります。exceptionを指定するか、しないかで処理が変わってきます。
Whenブロックは、私的にはあまり使用したことはないのですが。
- Whenブロック
- Catchブロックに制御がうつり、exception(エラー値)と同じエラーだった場合、さらに、絞り込むといった感じです。
Finallyブロックで、エラー発生時に、ファイルをクローズしたい、メモリを解放したいなどの処理が行えます。
- Finallyブロック
- Try ステートメントから抜けるとき、必ず Finally ブロックが実行されます。
Exit Try は、For構文の”Exit For” Sub構文の”Exit Sub” などと同じ感じで、処理を途中で抜けさせる役目をもっています。
- Exit Try
-
Try…Catch…Finally 構造から抜けます。
そして、End Try ステートメントの次のコードに制御が移ります。
注意:Finally ステートメントは必ず実行されますが、Finally ブロック内には記述できません。
特性、注意点
両方のブロックで、使用したいときは、Try…Catch…Finally の外で宣言しておく必要があります。
exceptionについて
Catchブロックで、エラー値として用いられるexception値ですが、このエラー値は、Exception クラスのインスタンス、Exception クラスから派生したクラスです。
このExceptionクラスのインスタンスには、エラー番号やメッセージなどのエラー情報が含まれます。
関連するエントリー
- None Found