Wat is een exception?
Bij het uitvoeren van C#-code kunnen verschillende fouten optreden: programmeerfouten gemaakt door de programmeur, fouten door verkeerde invoer, of andere onvoorzienbare zaken.
Wanneer een fout optreedt, zal C# normaal gesproken stoppen en een foutmelding genereren. De technische term hiervoor is: C# zal een exception (een uitzondering) opwerpen (throw an error).
Casus
Bij een deling door 0 geeft de code een error en dus een exception. Deze wordt ‘opgeworpen’ en het programma toont aan de gebruiker de error. En het programma stopt! Om een gebruikersvriendelijke melding te geven (en wellicht ook logging en andere meldingen) moet de exception worden ‘opgevangen’ in de code en worden verwerkt. Ook kan besloten worden hoe het programma te vervolgen (of alsnog te stoppen).
Hoe zit een exception in elkaar?
Exceptions worden “gegooid” (throw) en “opgevangen” (catch). Wanneer er een fout optreedt in een programma, “gooit” het systeem een exception om aan te geven dat er iets mis is gegaan. Dit wordt ook wel “throwing an exception” genoemd. In C# kun je een exception gooien met de syntaxis throw new Exception("Foutmelding");
. Hierbij wordt een nieuw exception-object gemaakt met een foutmelding, die aangeeft wat er precies mis is gegaan in het programma.
Hoe vang je exceptions op?
Code die mogelijk een exception ‘gooit’ wordt verpakt in een try
block. Mocht daadwerkelijk een error worden opgeworpen dan wordt deze opgevangen in een catch
block.
Codevoorbeeld
try
{
int result = 10 / 0;
}
catch (DivideByZeroException ex)
{
Console.WriteLine("Er is een deling door nul: " + ex.Message);
}
Soorten exceptions
Er zijn verschillende soorten exceptions, zoals DivideByZeroException
of FileNotFoundException
. Het is handig om specifieke exceptions af te handelen, zodat je gericht kunt reageren op verschillende fouten. Als vangnet kun je een algemene catch (Exception ex)
gebruiken, die alle uitzonderingen opvangt, maar het is beter om dit alleen als laatste optie te gebruiken.
Finally
De finally
-blok wordt altijd uitgevoerd, ongeacht of er een exception is opgetreden in het try
-blok. Het is ideaal voor opruimwerkzaamheden, zoals het sluiten van bestanden of het vrijgeven van bronnen. Dit zorgt ervoor dat belangrijke acties niet worden overgeslagen.
Codevoorbeeld
try
{
// Code die een exception kan veroorzaken
}
catch (Exception ex)
{
// Exception afhandelen
}
finally
{
// Code die altijd wordt uitgevoerd
}
Volgende stap: Oefeningen exceptions