c# : errors en exceptions

  1. Voorbereiding
  2. Inleiding
  3. Try...Catch...
  4. Checked en unchecked berekeningen
  5. Throw
  6. Finally

Voorbereiding

  • Maak een nieuwe Visual Studio solution Errors.
  • Maak in de solution Errors een nieuwe WPF Application WpfErrors.
  • Inleiding

    Je hebt nu reeds geleerd hoe je met statements, methoden, variabelen omgaat in C#.
    In dit hoofdstuk leer je hoe je kan omgaan met fouten die kunnen optreden binnen een toepassing.
    Opgepast, we hebben het hier niet om syntactische fouten die je maakt tijdens het typen van je programmacode, of fouten die je maakt tegen de "spelregels" van C#, dergelijke fouten kunnen tijdens het compileren van je code gedetecteerd en dus opgelost worden (compile-time errors).
    Dit hoofdstuk gaat in op fouten die tijdens het uitvoeren van een programma kunnen optreden (runtime-errors). Het is belangrijk dat je in je programma rekening houdt met mogelijke foute handelingen van een gebruiker, mogelijke hardwarematige problemen (netwerkverbindingen vallen uit, bestand is onleesbaar, ...), ...

    Je maakt bijvoorbeeld een toepassing die twee getallen die door de gebruiker worden ingegeven optelt en de som op het scherm toont.
    Wat gebeurt er als de gebruiker letters invult, of helemaal niks?

    De bedoeling van dit hoofdstuk is dat je dergelijke mogelijke probleemsituaties kan inschatten, en softwarematig een oplossing biedt, zonder dat je toepassing "crasht".
    Hierbij wordt niet bedoeld dat je elk probleem moet kunnen oplossen - letters kunnen we nu eenmaal niet optellen -, je kan de gebruiker wel op de hoogte stellen van het probleem en informeren hoe dit probleem kan opgelost worden door bijvoorbeeld een bericht te tonen: "Gelieve numerieke waarden in te geven.".

    Je kan dus in je programmacode een pad voorzien voor het goede verloop van de toepassing, maar je moet zeker rekening houden dat dit verloop wel eens verstoord kan worden.

    Het is belangrijk in te zien dat we dergelijke onvoorziene omstandigheden in een programma uitzonderingen of exceptions noemen, deze kunnen we gestructureerd in programmacode afhandelen. Fouten daarintegen zijn verkeerde denkwijzen of verkeerde programmaalgoritmes: als je de gebruiker belooft twee getallen op te tellen, maar je berekent het verschil, dan zal je programma wellicht niet vastlopen, maar de gebruiker zal ook niet echt gelukkig zijn.

    Try...Catch...

    Een Exception veroorzaken :)

    C# maakt het eenvoudig om foutafhandelingscode te scheiden van code die de hoofdflow van je programma vormt.
    Om programma's te maken die zich bewust zijn van fouten doe je twee zaken:
    try
    {
    	//statements die mogelijks een fout kunnen opleveren
    }
    catch
    {
    	//statements die uitgevoerd worden wanneer een fout optreedt
    }
    

    Een Exception afhandelen

    Checked en unchecked berekeningen

    De bovengrens voor een int (Int32) is 2147483647 (231 - 1).

    Throw

    Stel dat je methode BerekenSom niet mag toestaan dat het resultaat negatief is.

    Je doet dus een controle in de methode, maar wenst dit kenbaar te maken op de plaats waar de methode werd aangeroepen.
    Dit kan je door in de methode een Exception op te werpen (throw). Deze Exceptie kan je dan afhandelen wanneer je de methode aanroept.

    int BerekenSom(int getalL, int getalR)
    {
    	int som = checked(getalL + getalR);
    	if (som < 0)
    		throw new ArgumentOutOfRangeException("Mag niet negatief zijn");
    	return som;
    }
    

    Pas nu ook de code aan voor het drukken op de knop zodat de ArgumentOutOfRangeException wordt opgevangen:

    catch (ArgumentOutOfRangeException aEx)
    {
    	MessageBox.Show("Verkeerde som\n\nDetails: "
    		+ aEx.Message
    		, "Ingavefout");
    }
    

    Finally

    Wanneer een Exception optreedt wordt de flow van een programma veranderd.

    Soms is het nodig code te schrijven die moet uitgevoerd worden, fout of niet, bepaalde statements moeten uitgevoerd worden.
    Dit kan je bereiken door na een try-blok een finally blok te voorzien.

    try 
    {
    	... statements die een Exception kunnen veroorzaken...
    }
    finally
    {
    	... statements die zeker uitgevoerd moeten worden...
    }
    

    Wanneer we nu ook catch-blokken voorzien ziet de code er als volgt uit.

    try 
    {
    	... statements die een Exception kunnen veroorzaken...
    }
    catch
    {
    	... afhandelen van Exceptions ...
    }
    finally
    {
    	... statements die zeker uitgevoerd moeten worden...
    }
    

    Toepassing van finally zal je vinden in het steeds vrijgeven van bronnen (geopende files, databaseconnecties), zelfs wanneer onderweg iets is foutgelopen.

    Meer tutorials:
    leer ook: html | xhtml | css | asp | asp.net | c# | ado.net | linq | ajax | java | javascript
    Valid HTML 4.01! Valid CSS! © - Cursusweb