调用另一个类初始值设定项时如何处理错误?

时间:2016-06-05 07:49:14

标签: vb.net class error-handling initializer

我正在尝试进行一些错误处理,同时初始化新类。我对它的设置方式感到惊讶,并希望我只是错过了一些非常简单的东西。这是我想要完成的一个简单版本:

Public Class TestClass
    Public Sub New(ByVal sLink as String)
        Try
            Me.New(New Uri(sLink))
        Catch ex As Exception
            MessageBox.Show("Hey, initializing this class failed...  Is the URL valid?")
        End Try
    End Sub
    Public Sub New(ByVal uLink as Uri)
        MessageBox.Show("Class Initialized Successfully!")
    End Sub
End Class

上面显然失败了,因为带有“Me.New(...)”的行必须是第一行。但是我能做到这一点,如果有人传递的字符串不是有效的Uri呢?请考虑以下事项:

' This would fail and I'd like to catch it somehow
Dim tmp as New TestClass("Hello World!")
' Something like this would pass successfully
Dim tmp as New TestClass("http://somevalidlink.com/")
' And so would this, too.
Dim tmp as New TestClass(New Uri("http://somevalidlink.com/")

我一直在搜索,似乎找不到任何东西......也许我只是不知道要查找的关键字。任何正确方向的提示都会有很大的帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你不需要抓住你的班级不负责的错误 而是检查输入参数并在参数错误时抛出异常 通过抛出异常,您将确保该类能正常工作。

Public Class TestClass

    Private _Link As Uri

    Public Sub New(ByVal link as Uri)
        If link Is Nothing Then Throw New ArgumentNullException(NameOf(link))
        _Link = link
    End Sub

End Class

如果要添加功能以通过String参数创建实例并仍使用类型为Uri的参数的构造函数,则可以创建一个静态/共享方法,该方法检查字符串并执行所需的构造函数。

Public Shared Function CreateInstance(link As String) As TestClass
    Try
        Dim url As New Uri(link)
        Return New TestClass(url)
    Catch ex As Exception
        'Do your error handling
    End Try
End Function