In Visual Basic .NET kun je je eigen type uitzonderingen maken om specifieker aan te geven welke fouten zijn opgetreden in de applicatie. Hiervoor moet je een nieuwe klasse afleiden van System.Exception (of een van zijn afgeleiden) en, indien nodig, nieuwe eigenschappen toevoegen om extra informatie door te geven.
Custom Exceptions maken de code leesbaarder en onderhoudbaarder, vooral als je specifieke verwerking nodig hebt voor bepaalde bedrijfsscenario's.
Voorbeeld:
Public Class InvalidUserNameException Inherits ApplicationException Public Sub New(message As String) MyBase.New(message) End Sub End Class ' Gebruik: Sub ValidateUserName(userName As String) If userName = "" Then Throw New InvalidUserNameException("De gebruikersnaam mag niet leeg zijn") End If End Sub
Vraag: "Kan ik gewoon een string gooien met Throw "Fout" in Visual Basic, en wordt dit door Try...Catch afgehandeld?"
Antwoord: Nee, dat kan niet. De Throw-operator vereist een object van het type Exception. Proberen een string te gooien (Throw "err") zal leiden tot een compilatiefout. Je moet altijd een nieuw exemplaar van de klasse Exception of een afgeleide daarvan maken.
Voorbeeld van onjuiste code:
' Dit zal een fout veroorzaken! Throw "Fout!"
Voorbeeld van juiste code:
Throw New Exception("Fout!")
Verhaal:
In een groot project gooide een van de ontwikkelaars uitzonderingen met
Throw "Ongeldige gegevens!". Dit leidde tot compilatiefouten in productie, omdat de code de statische controle niet doorging. Het ontbreken van een juiste verwerking van uitzonderingen vertraagde de release met een week — er moest gezocht en herschreven worden naar alle gevallen vanthrowmet strings door de code.
Verhaal:
Het team maakte aangepaste uitzonderingen zonder een constructor met de parameter InnerException toe te voegen. Bij het diagnosticeren van complexe fouten ging de oproepstack verloren omdat de originele uitzondering niet kon worden "ingewikkeld". Dit maakte het moeilijk om de oorspronkelijke oorzaak van de fout te vinden.
Verhaal:
In een media-applicatie werd de custom exception te vaak en niet voor het doel gebruikt (bijvoorbeeld bij elke ongeldige invoer). Dit leidde tot een daling van de systeemprestaties — omdat het genereren van uitzonderingen operationeel kostbaar is. Na een review werden veel van dergelijke uitzonderingen vervangen door gewone voorwaarde-controles.