2016-06-05 6 views
0

Я пытаюсь выполнить обработку ошибок, а также инициализировать новые классы. Я удивлен тем, как он настроен, и я надеюсь, что я просто пропустил что-то очень простое. Вот простой вариант того, что я пытаюсь выполнить:Как вы обрабатываете ошибки при вызове другого инициализатора класса?

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/") 

Я искал и не могу найти что-нибудь ... Может быть, я просто не знаю, ключевые слова для поиска. Любые намеки в правильном направлении были бы большой помощью.

Спасибо!

ответ

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 
+0

Да, я думаю, что это, вероятно, путь. Я добавил функцию «TryParse», которая будет прекрасно работать. К сожалению, никто не может этого сделать ... Спасибо, Фабио! – Apachi