VB.Netにおける例外処理(Try Catch)

⚡ スマートサマリー

VB.Net の例外処理は、Try、Catch、Finally、Throw キーワードを使用して、ゼロ除算などの実行時エラーを処理し、プログラムが実行中にクラッシュするのではなく、問題に適切に対応できるようにします。

  • 🔍 例外: 例えば、数値をゼロで割るなど、実行中に発生する問題。
  • 🛡️ 試しに捕まえてみよう: try は危険なコードをラップし、catch は発生した例外を処理します。
  • 最後に: Finally ブロックは、例外が発生するかどうかにかかわらず実行されます。
  • 🚦 スロー: throw は System.Exception クラスから派生した例外オブジェクトを発生させます。
  • 🧩 カスタム例外: ApplicationException を継承して、独自の例外タイプを定義します。
  • 🤖 AIによる支援: GitHub CopilotとIntelliCode 入力と同時にTry-Catchブロックを生成します。

VB.Netにおける例外処理

VB.Net の例外とは何ですか?

An 例外 VB.Net では、プログラム実行中に発生する問題を指します。これは予期しない状況によって発生します。良い例としては、除算演算を実行していて、ゼロ (0) で除算した場合が挙げられます。例外が発生します。

VB.Net の例外処理とは何ですか?

例外あり VB.Netを使用すると、プログラムの制御をある部分から別の部分に転送できます。VB.Net では、例外は次の 4 つのキーワードを使用して処理されます。

キーワード Detail
意図に基づいて、適切なメッセージを適切なユーザーに適切なタイミングで Try ブロックの役割は、特定の例外がアクティブになるコード ブロックを識別することです。 その後に catch ブロックが続く必要があります。
レスリング 例外のキャッチはこのブロックで行われます。 例外を処理する例外ハンドラです。
最後に 例外が発生したかどうかに関係なく、Finally ブロックを使用して一連のステートメントを実行します。
投げる 問題が発生すると例外がスローされます。 これは Throw キーワードの働きです。

これら4つのキーワードの役割が明確になったところで、それらが単一の文の中でどのように組み合わされるかを考えてみましょう。

VB.Net の Try Catch の構文

VB.Net の Try Catch ステートメントは、次の構文を使用して定義されます。

Try
   [ try_Statement(s) ]
   [ Exit Try ]
[ Catch [ exception_name [ As type ] ] [ When expression ]
   [ catch_Statement(s) ]
   [ Exit Try ] ]
[ Catch ... ]
[ Finally
   [ finally_Statement(s) ] ]
End Try

Try/Catch ブロックは、例外を発生させる可能性のあるコードを囲む必要があります。 このコードは保護されたコードとして知られています。 さまざまな種類の例外をキャッチする必要がある場合は、複数の catch ステートメントを使用できます。

Try Catch と 最後に VB.Net での例外処理の例

Try/Catch文を使うと、通常のプログラムコードとエラー処理システムを分離できます。Try、Catch、Finallyキーワードを使って例外を処理する方法を見ていきましょう。

ステップ1) 新しいコンソール アプリケーションを作成します。

ステップ2) このコードを使用します:

Module Module1
    Sub divisionFunction(ByVal n1 As Integer, ByVal n2 As Integer)
        Dim answer As Integer
        Try
            answer = n1 \ n2
        Catch ex As DivideByZeroException
            Console.WriteLine("Exception: {0}", ex)
        Finally
            Console.WriteLine("Answer is: {0}", answer)
        End Try
    End Sub
    Sub Main()
        divisionFunction(4, 0)
        Console.ReadKey()
    End Sub

End Module

ステップ3) ツールバーの [開始] ボタンをクリックしてコードを実行します。次の出力が表示されます。

VB.NetのTry Catch Finallyで捕捉されたDivideByZeroExceptionのコンソール出力

コードのスクリーンショットは次のとおりです。

Visual Studio で表示される VB.Net の Try Catch Finally のサンプルコード

の説明 Code:

  1. Module1 という名前のモジュールを作成します。
  2. 1 つの整数引数 n2 と nXNUMX を使用して、divisionFunction という名前のサブプロシージャを作成します。 ByVal は、引数の値が値によって渡されることを示す VB.Net キーワードです。
  3. Answer という名前の整数変数を作成します。
  4. Try/Catch ブロックの開始。 例外が発生する可能性があるコードをこのブロックで囲む必要があります。
  5. 変数 n1 と n2 の値の間で除算演算を実行します。除算演算の結果は変数 answer に割り当てられます。このコードでは、たとえば数値をゼロで除算すると例外が発生する可能性があるため、Try/Catch ブロックで囲んでいます。
  6. DivideByZeroException という名前の例外をキャッチし、生成された例外メッセージを ex に割り当てます。
  7. 発生した例外のタイプ/名前をユーザーに通知するために、コンソールにテキストを出力します。
  8. 最後にブロック。 これは、例外がキャッチされたかどうかに関係なく実行されます。
  9. 除算演算の結果を示すテキストをコンソールに出力します。
  10. Try ブロックの終わり、つまりエラー処理コードの終わり。
  11. DivisionFunction サブプロシージャの終了。
  12. メインのサブプロシージャの開始。
  13. divisionFunction サブプロシージャを呼び出します。ここでは 1 つの整数引数の値が渡されます。n4 の値は 2、n0 の値は 4 です。つまり、除算演算は 0\1、つまり n2\nXNUMX になります。
  14. コンソール ウィンドウを一時停止し、ユーザーがコンソール ウィンドウを閉じる操作を行うのを待ちます。
  15. メインのサブプロシージャの終了。
  16. モジュールの終わり。

VB.Net のユーザー定義の例外

VB.Netでは、独自の例外を定義できます。ユーザー定義の例外クラスは、ApplicationExceptionクラスから取得できます。例を用いて説明しましょう。

VB.Net のユーザー定義例外の例

以下は、VB.Netにおけるユーザー定義例外の例です。

ステップ1) 新しいコンソール アプリケーションを作成します。

ステップ2) 次のコードを使用します。

Module Module1

    Public Class HeightIsZeroException : Inherits ApplicationException
        Public Sub New(ByVal text As String)
            MyBase.New(text)
        End Sub
    End Class
    Public Class Height
        Dim height As Integer = 0
        Sub showHeight()
            If (height = 0) Then
                Throw (New HeightIsZeroException("Zero Height found"))
            Else
                Console.WriteLine("Height is: {0}", height)
            End If
        End Sub
    End Class
    Sub Main()
        Dim hght As Height = New Height()
        Try
            hght.showHeight()
        Catch ex As HeightIsZeroException
            Console.WriteLine("HeightIsZeroException: {0}", ex.Message)
        End Try
        Console.ReadKey()
    End Sub

End Module

ステップ3) コードを実行するには、上部のバーから [開始] ボタンをクリックします。次の出力が表示されます。

VB.Netのユーザー定義HeightIsZeroExceptionメッセージがコンソールに表示される

コードのスクリーンショットは次のとおりです。

Visual Studio での VB.Net ユーザー定義例外クラスのサンプルコード

の説明 Code:

  1. Module1 という名前のモジュールを作成します。
  2. HeightIsZeroException という名前の例外クラスを作成します。 このクラスは、ApplicationException クラスをすべて継承します。
  3. New という名前のサブプロシージャを作成します。 text という名前の文字列引数を XNUMX つ受け取ります。
  4. 基本クラスのコンストラクターを呼び出し、それに上記の引数を渡します。
  5. 新しいサブプロシージャの終了。
  6. HeightIsZeroException クラスの終了。
  7. Height という名前のクラスを作成します。 そのパブリック アクセス修飾子は Public であり、公的にアクセスできることを意味します。
  8. Height という名前の整変数を作成し、その値を 0 に初期化します。
  9. showHeight() という名前のサブプロシージャを作成します。
  10. 変数 Height の値が 0 になるかどうかを確認します。If…Then 条件を使用しました。
  11. 上記の条件が true の場合、HeightIsZeroException をスローします。 この例外がスローされると、「高さゼロが見つかりました」というメッセージが表示されます。
  12. If 条件が true でない場合に実行される Else 部分。
  13. 高さが 0 でない場合にコンソールに表示するメッセージ。
  14. If 条件の終了。
  15. showHeight() サブプロシージャの終了。
  16. クラスの高さの終わり。
  17. メインのサブプロシージャの開始。
  18. Height クラスのインスタンスとして Height という名前のオブジェクトを作成します。
  19. 例外処理ブロックの開始。
  20. Heightクラスで定義されているshowHeight()サブルーチンを呼び出しています。このメソッドにアクセスするために、このクラスのオブジェクトを使用しています。この行は例外を発生させる可能性があるため、例外処理コードで囲んでいます。
  21. HeightIsZeroException 例外が発生した場合に、オブジェクト ex としてキャッチします。
  22. HeightIsZeroException がキャッチされたときにコンソールに出力するメッセージ。
  23. 例外処理ブロックの終わり。
  24. コンソール ウィンドウを一時停止し、ユーザーがコンソール ウィンドウを閉じる操作を行うのを待ちます。
  25. メインのサブプロシージャの終了。
  26. モジュールの終わり。

VB.Net で例外をスローする

例外処理では、オブジェクトをスローすることを選択できます。ただし、そのオブジェクトは、直接的または間接的に System.Exception クラスから派生している必要があります。例:

VB.Net でのスロー例外の例

以下は、VB.Net で例外をスローする例です。

ステップ1) 新しいコンソール アプリケーションを作成します。

ステップ2) 次のコードを使用します。

Module Module1

    Sub Main()
        Try
            Throw New ApplicationException("Throwing a custom exception")
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        Finally
            Console.WriteLine("The Finally Block")
        End Try
        Console.ReadKey()
    End Sub


End Module

ステップ3) コードを実行するには、上部のバーから [開始] ボタンをクリックします。次の画面が表示されます。

VB.Netのthrowステートメントのコンソール出力にカスタム例外メッセージを表示する

コードのスクリーンショットは次のとおりです。

VB.Net 例外をスローするサンプルコード (Try Catch Finally を使用)

の説明 Code:

  1. Module1 という名前のモジュールを作成します。
  2. メインのサブプロシージャの開始。
  3. エラー処理コードの始まり。
  4. 例外オブジェクトをスローします。このコードは例外を生成する可能性があるため、Try/Catch ブロックで囲んでいます。
  5. 行が例外をスローした場合、オブジェクト ex として例外をキャッチします。
  6. 例外が発生した場合に、コンソールに例外メッセージを出力します。
  7. 例外がキャッチされたかどうかに関係なく実行される Final ブロッ​​ク。
  8. Final ブロッ​​クの実行時にコンソールに出力するメッセージ。
  9. 例外処理コードの終わり。
  10. ユーザーがコンソールを閉じる操作を行うまで、しばらくコンソールを一時停止します。
  11. メインのサブプロシージャの終了。
  12. モジュールの終わり。

よくあるご質問

はい。Try文は、Finallyブロックが含まれていれば、Catchブロックがなくても有効です。このTry Finally形式は、クリーンアップコードを実行しますが、例外自体は処理しません。

はい。さまざまな例外タイプを処理するために、複数の Catch ブロックをリストアップしてください。VB.Net はそれらを順番にチェックし、最初に一致したものを使用するため、最も具体的なものから最も一般的でないものの順に並べてください。

ほぼ常に実行されます。例外が捕捉されたかどうか、またReturn文の後でも、finally文は実行されます。End文またはStackOverflowExceptionの場合にのみスキップされます。

throw は現在の例外を再発生させ、元のスタックを保持します trace. throw ex はスタックをリセットします tracエラーが発生した実際の場所を隠蔽し、現在の行にリダイレクトします。通常のThrowを推奨します。

構文エラーは、プログラムの実行前にコンパイラによって検出されます。例外は実行時に発生し、try-catchブロックで処理できます。

よく発生する例外としては、DivideByZeroException、NullReferenceException、IndexOutOfRangeException、FormatException、OverflowExceptionなどがあります。これらはすべてSystem.Exceptionを継承しており、個別に捕捉することができます。

Yes. GitHubコパイロット 平易な英語のコメントを完全な Try Catch Finally ブロックに変換し、適切な例外タイプを提案します。生成されたハンドラは必ず確認してください。

はい。Visual Studio インテリCode 数千ものオープンソースプロジェクトから学習した情報に基づき、Catch句や例外タイプに対して、文脈を考慮した行全体の補完機能を提供します。