VB.NETの例外処理のtry...catch構文とthrow文と独自の例外の作成のサンプルです。
目次
例外処理 | try...catch構文 |
throw文 | |
独自の例外を作成する |
try...catch構文
try { 例外が発生する可能性がある処理 } catch ( 例外のクラス 変数 ) { 例外発生時の処理 } finally{ 例外ありなしに関わらず実行する処理 } |
- 例外が起こる可能性がある箇所をtryブロックで囲みます。
- 例外が発生しcatchブロックの引数の例外のクラスの型と同じときにcatchブロックの処理が行われます。
- finallyブロックは例外のあるなしにかかわらず常に実行されます。
- 以下はMicrosoftのTry...Catch...Finally ステートメントのリンクです。
https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/statements/try-catch-finally-statement
try...catchのサンプルです。
Module Module1
Sub Main()
Dim num1 As Integer = 4
Dim num2 As Integer = 0
Try
Dim ans As Integer = calc1(num1, num2)
Catch ex As ArithmeticException
Console.WriteLine(ex.Message)
Finally
Console.WriteLine("処理が終了しました")
End Try
End Sub
Private Function calc1(num1 As Integer, num2 As Integer)
Return num1 / num2
End Function
End Module
6行目は、例外が起こる可能性がある関数をtryブロックで囲んでいます。
17行目は、0で割るためArithmeticExceptionの例外が発生します。
8行目は、例外をcatchしメッセージを表示します。「算術演算の結果オーバーフローが発生しました。」
10行目は、finallyブロックでメッセージが表示されます。「処理が終了しました」
throw文
throw new 例外 |
- 任意の場所で例外を投げることができます。
- 例外は以下である必要があります。
・Exceptionクラス
・Exceptionクラスのサブクラス - 以下はMicrosoftのThrow ステートメントのリンクです。
https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/statements/throw-statement
throw文のサンプルです。
Module Module1
Sub Main()
Dim num1 As Integer = 1
Try
Dim ans As Integer = calc1(num1)
Catch ex As Exception
Console.WriteLine(ex.Message)
Finally
Console.WriteLine("処理が終了しました")
End Try
End Sub
Private Function calc1(num1 As Integer)
If num1 = 1 Then
Throw New Exception("エラーを投げます")
End If
Return num1
End Function
End Module
5行目からは、try-catch構文です。
17行目は、throw文で例外を投げています。
7行目は、例外をcatchしメッセージを表示します。「エラーを投げます」
10行目は、finallyブロックでメッセージが表示されます。「処理が終了しました」
独自の例外を作成する
作成するアプリに合わせた独自の例外を作成することで、例外ハンドリングを容易にし保守性と可読性を上げることができます。
独自の例外を作成するには、Exceptionクラスを継承します。
Module Module1
Sub Main()
Dim num1 As Integer = 0
Try
Dim ans As Integer = calc1(num1)
Catch ex As TestException
Console.WriteLine(ex.Message)
Finally
Console.WriteLine("終了")
End Try
End Sub
Private Function calc1(num1 As Integer)
If (num1 = 0) Then
Throw New TestException("独自例外")
End If
Return num1
End Function
End Module
Public Class TestException
Inherits Exception
Sub New(a As String)
MyBase.New(a)
End Sub
End Class
22,23行目で、Exceptionクラスを継承して独自の例外を作成しています。
16行目は、独自のエラーをthrowしています。
26行目のMyBaseは、現在のインスタンスの基底クラスを参照します。
7行目でcatchされ「独自例外」と表示されます。
関連の記事