1

System.DivideByZero クラスから継承する ZeroException という名前の継承クラスを作成しましたが、dividebyzero 例外が発生してもイベントをキャッチしません。

Class ZeroException
Inherits System.DivideByZero
Public Overrides ReadOnly Property Message() as String
Get 
Return "Divide By Zero"
End Get
End Property
End Class

メインコード:

Sub Calc()
dim x as integer=5
dim y as integer=0
dim k as single

Try   
k=x\y 'Integer Division
Catch ex as ZeroException  
Console.WriteLine(ex.Message) 'But I get another message. Not Divide By Zero
End Try

End Sub
4

1 に答える 1

4

カスタム例外をキャッチするのではなく、例外をスローします。この場合、コードは次のようになります。

    Try
        k = x \ y 'Integer Division
    Catch ex As DivideByZeroException
        Throw New ZeroException
    End Try

これを示すテスト ケースを次に示します。

Imports System.Text
Imports Microsoft.VisualStudio.TestTools.UnitTesting

Class ZeroException
    Inherits DivideByZeroException
    Public Overrides ReadOnly Property Message() As String
        Get
            Return "Divide By Zero"
        End Get
    End Property
End Class

<TestClass()> Public Class UnitTest1

    <TestMethod()> Public Sub TestMethod1()
        Try
            MethodThrowsCustomException()
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
    End Sub

    Public Sub MethodThrowsCustomException()
        Dim x As Integer = 5
        Dim y As Integer = 0
        Dim k As Single

        Try
            k = x \ y 'Integer Division
        Catch ex As DivideByZeroException
            Throw New ZeroException
        End Try

    End Sub

End Class
于 2012-09-21T09:45:00.563 に答える