2016-06-05 10 views
0

Ich versuche eine Fehlerbehandlung durchzuführen, während ich auch neue Klassen initialisiere. Ich bin überrascht, wie es aufgebaut ist und hoffe, dass ich etwas sehr Einfaches verpasse. Hier ist eine einfache Version von dem, was ich zu erreichen bin versucht:Wie behandeln Sie Fehler, wenn Sie einen anderen Klasseninitialisierer aufrufen?

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 

Die offensichtlich oben schlägt fehl, da die Zeile mit „Me.New (...)“ die erste Zeile sein muss. Ich könnte das aber tun, was, wenn jemand eine Saite passiert, die kein gültiger Uri ist? Beachten Sie Folgendes:

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

Ich habe gesucht und kann nicht scheinen, etwas zu finden ... Vielleicht weil ich weiß einfach nicht, die Schlüsselwörter zu suchen. Hinweise in die richtige Richtung wären eine große Hilfe.

Danke!

Antwort

0

Ich denke, dass Sie nicht Fehler fangen müssen, für die Ihre Klasse nicht verantwortlich ist.
Überprüfen Sie stattdessen den Eingangsparameter und die Ausnahme, wenn der Parameter falsch ist.
Durch das Auslösen der Ausnahme werden Sie sicher sein, dass die Klasse ordnungsgemäß funktioniert.

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 

Wenn Sie Feature mögen hinzufügen Instanz von String Parametern zu erstellen und nach wie vor mit dem Parameter des Typs mit Konstruktor Uri, dann können Sie eine statische/Shared-Methode erstellen, die Zeichenfolge überprüfen und ausführen Konstruktor Sie wollen.

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

Ja, ich denke, das ist wahrscheinlich der Weg zu gehen. Ich habe eine "Tryparse" -Funktion hinzugefügt, die gut funktioniert. Es ist bedauerlich, dass man so etwas nicht machen kann ... Danke, Fabio! – Apachi