如何用自己的代码“替换”异常?

问题描述 投票:0回答:1

当异常发生时,我想使用自己的catch-exception。

我的测试代码是这样的...

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Try
            Dim sb As System.Text.StringBuilder
            sb.Append("test")

        Catch ex As Exception
            ex.Alert("Yo")

        End Try
    End Sub
End Class


<Serializable>
Public Class Exception
    Inherits System.Exception

    Public Sub Alert(text As String)
        MsgBox(text)
    End Sub

    Public Sub New(message As String)
        MyBase.New(message)
    End Sub

    Public Sub New(message As String, innerException As Exception)
        MyBase.New(message, innerException)
    End Sub

    Public Sub New()
    End Sub

    Protected Sub New(serializationInfo As Runtime.Serialization.SerializationInfo, streamingContext As Runtime.Serialization.StreamingContext)
    End Sub

End Class

但是它没有捕获错误。

如何用自己的类替换“ Exception”类?

vb.net exception
1个回答
0
投票

您已经成功创建了一个自定义异常类型(尽管仅将其命名为Exception可能会引起混淆,但是您应该给它指定一个更具体的名称)。但是throwing是您的异常类型。内置的.NET代码都不是在考虑您的自定义异常的情况下构建的,因此不会抛出该类型。

您的代码可以引发您的自定义异常类型。例如,根据某些条件引发异常:

Try
    If someCondition Then
        Throw New Exception()
    End If
Catch ex As Exception
    ex.Alert("Yo")
End Try

通常,类似的情况会在调用堆栈的更深处发生,例如在您调用的方法中,而不是与此处的Try/Catch处于同一级别。 (请考虑一下一般性建议,即不要为控制流使用异常,这是在这个人为的示例中所发生的事情。)

但是关键是您的代码会抛出您的自定义异常,内置的.NET代码当然不会那样做。


推荐问答