構造化例外処理、Visual Basic .NET または Visual Basic 2005年での使用方法

概要

この資料では、構造化例外処理、Visual Basic .NET または Visual Basic 2005 を使用する方法について説明します。

要件

推奨されるハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および必要な service pack は次をとおり。
  • Visual Basic .NET または Visual Basic 2005
この資料は次のトピックに精通している事を前提としています。
  • Visual Basic .NET または Visual Basic 2005
  • Microsoft Visual Studio .NET または Microsoft Visual Studio 2005

構造化例外処理

Visual Basic .NET または Visual Basic 2005年は、Microsoft Visual Basic の以前のバージョンで提供されている「On Error Goto」エラーの処理には、強力なより読みやすい代替を提供する構造化例外処理を提供します。構造化例外処理はより強力なエラー ハンドラー内で、同じプロシージャ内の他のエラー ハンドラーをネストすることができます。さらに場合は、構造化例外処理は、のようなブロック構文を使用しています.その他.End Ifステートメントです。これにより、Visual Basic .NET および Visual Basic 2005年のコードの読み取りおよび保守が簡単に。

: Visual Basic .NET または Visual Basic 2005年では、下位互換性のための"On Error Goto"構文を保持します。Visual Basic .NET または Visual Basic 2005年のコードでこの構文を使用できます。ただし、構造化例外処理と同じプロシージャ内でのOn Errorステートメントを組み合わせることはできません。例外処理の構造を記述する場合、新しいコードを使用することをお勧めします。

構造化エラー処理の基本構文は次のとおりです。
Try   'Code that may raise an error.
Catch
'Code to handle the error.
Finally
'Code to do any final clean up.
End Try

End Tryステートメントは、必要があります。キャッチし、最後のステートメントは必須ではありませんが、それらの少なくとも 1 つをコードに含める必要があります。各Catchブロックで特定のエラーを処理するように、複数のCatchステートメントを指定することもできます。

例外をキャッチします。

  1. Visual Studio .NET または Visual Studio 2005 を起動します。
  2. Visual Basic .NET または Visual Basic 2005年では、新しいコンソール アプリケーション プロジェクトを作成します。
  3. Sub Mainプロシージャに、次のコードを追加します。
    Dim a As Integer = 0Dim b As Integer = 0
    Dim c As Integer = 0

    Try
    a = b \ c
    Catch exc As Exception
    Console.WriteLine("A run-time error occurred")
    Finally
    Console.ReadLine()
    End Try

  4. [デバッグ] メニューで、[開始アプリケーションを実行します。コードは、数値を 0 で除算しようとします。これは、ゼロ例外によって除算を原因となる無効な操作です。幸いなことに、 Catchブロックは、このエラーをキャッチし、コンソール ウィンドウには、次のエラー メッセージが表示されます。
    A run-time error has occurred

  5. コンソール ウィンドウを閉じます。

複数の例外をキャッチします。

このセクションでは、さまざまなエラーを処理するために複数のCatchステートメントを使用する方法を示します。

  1. 前のセクションで作成したコンソール アプリケーション プロジェクトを開きます。
  2. Sub Mainプロシージャに次のコードでは、前のセクションにコピーしたコードに置き換えます。
    Dim a As Integer = 2147483647Dim b As Integer = 0
    Dim c As Integer = 0

    Try
    a += 1
    Catch exc As DivideByZeroException
    Console.WriteLine("Error: Divide by zero")
    Catch exc As OverflowException
    Console.WriteLine("Error: Overflow")
    Finally
    Console.ReadLine()
    End Try

    このコードには、2 つのCatchブロックが含まれています: 0 個のエラーで以前の除算をキャッチして、新しいオーバーフロー エラーをキャッチします。
  3. [デバッグ] メニューで、[開始アプリケーションを実行します。コンソール ウィンドウには、次のエラー メッセージが表示されます。
    Error: Overflow

  4. コンソール ウィンドウを閉じます。
  5. 常に発生するすべてのエラーを予測できない、ために、予期しない例外のすべての Catchブロックを追加できます。たとえば、ステートメントの前に、最後に予期しないエラーをキャッチし、適切なエラー メッセージを表示するのには、次のコードを追加します。
    Catch exc As ExceptionConsole.WriteLine("Error: " & exc.Message)

  6. [ファイル] メニューの [ソリューションを閉じるをクリックします。

例外をスローします。

構造化例外処理は、例外をキャッチするのにCatchステートメントを使用します。構造化例外の処理も、例外をスローする方法が用意されています。たとえば、ビジネス ルールに違反した場合にエラーをスローすることができますので、プロパティの Setプロシージャ内のデータ検証を実行するときに例外をスローすることをお勧めします。

  1. Visual Studio .NET または Visual Studio 2005 を起動します。
  2. Visual Basic .NET または Visual Basic 2005年では、新しいコンソール アプリケーション プロジェクトを作成します。
  3. [プロジェクト] メニューの[クラスの追加をクリックします。
  4. [新しい項目の追加] ウィンドウで、 clsPerson.vbテキスト ボックスに入力とし、[ OK] をクリックします。
  5. パブリック クラスのの clsPerson 内の次のコードを追加するには.クラスを終了ステートメント。
    Private mintAge As Integer
    Public Property Age() As Integer
    Get
    Age = mintAge
    End Get
    Set(ByVal Value As Integer)
    If Value >= 0 Then
    mintAge = Value
    Else
    Throw New ArgumentException ("Age cannot be negative")
    End If
    End Set
    End Property

    このコードは、 Ageプロパティを作成します。人には負の値の有効期間を設定できないために、クラスのユーザーの有効期間を 0 より小さい値に設定しようとする場合にエラーが発生します。
  6. Module1.vb のSub Mainプロシージャに、次のコードを追加します。
    Dim p As New clsPerson()
    Try
    p.Age = -1
    Catch exc As Exception
    Console.WriteLine(exc.Message)
    Finally
    Console.ReadLine()
    End Try

  7. [デバッグ] メニューで、[開始アプリケーションを実行します。コンソール ウィンドウには、次のエラー メッセージが表示されます。
    Age cannot be negative

  8. コンソール ウィンドウを閉じます。

完全なコード リスト

例外をキャッチします。

Module Module1
Sub Main()
Dim a As Integer = 0
Dim b As Integer = 0
Dim c As Integer = 0

Try
a = b \ c
Catch exc As Exception
Console.WriteLine("A run-time error occurred")
Finally
Console.ReadLine()
End Try

End Sub

End Module

複数の例外をキャッチします。

Module Module1
Sub Main()
Dim a As Integer = 2147483647
Dim b As Integer = 0
Dim c As Integer = 0

Try
a += 1
Catch exc As DivideByZeroException
Console.WriteLine("Error: Divide by zero")
Catch exc As OverflowException
Console.WriteLine("Error: Overflow")
Catch exc As Exception
Console.WriteLine("Error: " & exc.Message)
Finally
Console.ReadLine()
End Try


End Sub

End Module

例外をスローします。

Module Module1
Sub Main()
Dim p As New clsPerson()

Try
p.Age = -1
Catch exc As Exception
Console.WriteLine(exc.Message)
Finally
Console.ReadLine()
End Try
End Sub

End Module

Public Class clsPerson

Private mintAge As Integer

Public Property Age() As Integer
Get
Age = mintAge
End Get
Set(ByVal Value As Integer)
If Value >= 0 Then
mintAge = Value
Else
Throw New ApplicationException("Age cannot be negative")
End If
End Set
End Property

End Class

参照

詳細については、次のマイクロソフト Web サイトを参照してください。

VB.NET の方法の処理エラー: 例外 ( Visual Basic の開発者の資料) を利用して
http://msdn.microsoft.com/en-us/library/aa227603(v=vs.60).aspx

例外をキャッチする方法
http://msdn.microsoft.com/en-us/library/ys1b32h3(v=vs.80).aspx

例外をスローする方法
http://msdn.microsoft.com/en-us/library/z7w9ff54(v=vs.80).aspx

プロパティ

文書番号:315965 - 最終更新日: 2017/02/01 - リビジョン: 1

フィードバック