Vb.net-exception-handling

提供:Dev Guides
移動先:案内検索

VB.Net-例外処理

例外は、プログラムの実行中に発生する問題です。 例外は、ゼロ除算の試行など、プログラムの実行中に発生する例外的な状況への応答です。

例外は、プログラムのある部分から別の部分に制御を移す方法を提供します。 VB.Net例外処理は、 TryCatchFinally および Throw の4つのキーワードに基づいて構築されています。

  • Try -Tryブロックは、特定の例外がアクティブになるコードのブロックを識別します。 その後に1つ以上のCatchブロックが続きます。
  • キャッチ-プログラムは、問題を処理するプログラム内の場所で例外ハンドラーを使用して例外をキャッチします。 Catchキーワードは、例外のキャッチを示します。
  • 最後に-finallyブロックは、例外がスローされるかどうかに関係なく、指定された一連のステートメントを実行するために使用されます。 たとえば、ファイルを開く場合は、例外が発生したかどうかにかかわらず、ファイルを閉じる必要があります。
  • Throw -問題が発生すると、プログラムは例外をスローします。 これは、Throwキーワードを使用して行われます。

構文

ブロックが例外を発生させると仮定すると、メソッドは、TryキーワードとCatchキーワードの組み合わせを使用して例外をキャッチします。 Try/Catchブロックは、例外を生成する可能性のあるコードの周りに配置されます。 Try/Catchブロック内のコードは保護されたコードと呼ばれ、Try/Catchを使用するための構文は次のようになります-

Try
   [ tryStatements ]
   [ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
   [ catchStatements ]
   [ Exit Try ] ]
[ Catch ... ]
[ Finally
   [ finallyStatements ] ]
End Try

tryブロックが異なる状況で複数の例外を発生させた場合に備えて、複数のcatchステートメントをリストダウンして、異なるタイプの例外をキャッチできます。

.Net Frameworkの例外クラス

Net Frameworkでは、例外はクラスによって表されます。 .Net Frameworkの例外クラスは、主に直接または間接的に System.Exception クラスから派生しています。 System.Exceptionクラスから派生した例外クラスには、 System.ApplicationException および System.SystemException クラスがあります。.

  • System.ApplicationException* クラスは、アプリケーションプログラムによって生成された例外をサポートします。 したがって、プログラマーによって定義された例外は、このクラスから派生する必要があります。
*System.SystemException* クラスは、事前定義されたすべてのシステム例外の基本クラスです。

次の表は、Sytem.SystemExceptionクラスから派生した定義済みの例外クラスの一部を示しています-

Exception Class Description
System.IO.IOException Handles I/O errors.
System.IndexOutOfRangeException Handles errors generated when a method refers to an array index out of range.
System.ArrayTypeMismatchException Handles errors generated when type is mismatched with the array type.
System.NullReferenceException Handles errors generated from deferencing a null object.
System.DivideByZeroException Handles errors generated from dividing a dividend with zero.
System.InvalidCastException Handles errors generated during typecasting.
System.OutOfMemoryException Handles errors generated from insufficient free memory.
System.StackOverflowException Handles errors generated from stack overflow.

例外処理

VB.Netは、tryブロックとcatchブロックの形式で例外処理の問題に対する構造化されたソリューションを提供します。 これらのブロックを使用すると、コアプログラムステートメントがエラー処理ステートメントから分離されます。

これらのエラー処理ブロックは、 TryCatch 、および Finally キーワードを使用して実装されます。 以下は、ゼロ条件による除算が発生したときに例外をスローする例です-

Module exceptionProg
   Sub division(ByVal num1 As Integer, ByVal num2 As Integer)
      Dim result As Integer
      Try
         result = num1 \ num2
      Catch e As DivideByZeroException
         Console.WriteLine("Exception caught: {0}", e)
      Finally
         Console.WriteLine("Result: {0}", result)
      End Try
   End Sub
   Sub Main()
      division(25, 0)
      Console.ReadKey()
  End Sub
End Module

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Exception caught: System.DivideByZeroException: Attempted to divide by zero.
at ...
Result: 0

ユーザー定義の例外の作成

独自の例外を定義することもできます。 ユーザー定義の例外クラスは、 ApplicationException クラスから派生しています。 次の例はこれを示しています-

Module exceptionProg
   Public Class TempIsZeroException : Inherits ApplicationException
      Public Sub New(ByVal message As String)
         MyBase.New(message)
      End Sub
   End Class
   Public Class Temperature
      Dim temperature As Integer = 0
      Sub showTemp()
         If (temperature = 0) Then
            Throw (New TempIsZeroException("Zero Temperature found"))
         Else
            Console.WriteLine("Temperature: {0}", temperature)
         End If
      End Sub
   End Class
   Sub Main()
      Dim temp As Temperature = New Temperature()
      Try
         temp.showTemp()
      Catch e As TempIsZeroException
         Console.WriteLine("TempIsZeroException: {0}", e.Message)
      End Try
      Console.ReadKey()
   End Sub
End Module

上記のコードをコンパイルして実行すると、次の結果が生成されます-

TempIsZeroException: Zero Temperature found

オブジェクトを投げる

System.Exceptionクラスから直接または間接的に派生したオブジェクトの場合、オブジェクトをスローできます。

あなたは、現在のオブジェクトをスローするようにキャッチブロックでスローステートメントを使用することができます-

Throw [ expression ]

次のプログラムはこれを示しています-

Module exceptionProg
   Sub Main()
      Try
         Throw New ApplicationException("A custom exception _ is being thrown here...")
      Catch e As Exception
         Console.WriteLine(e.Message)
      Finally
         Console.WriteLine("Now inside the Finally Block")
      End Try
      Console.ReadKey()
   End Sub
End Module

上記のコードをコンパイルして実行すると、次の結果が生成されます-

A custom exception is being thrown here...
Now inside the Finally Block