C# Exceptions deel II

Geschreven door: op maandag 1 mei 2017

Leestijd:

c#

In C# Exceptions hebben we gezien hoe we een programma gecontroleerd kunnen laten stuk lopen. Maar hier eindigd de reis niet. Nu we vantevoren al hebben vastgesteld waar het programma vast zou kunnen lopen, kunnen we deze fouten ook gelijk gaan rechtzetten.

Try catch

Voor dit process is de try catch bedacht. Hiermee can een stuk code worden uitgevoerd. Mocht er een exception worden gegooid in deze code, dan wordt deze fout ‘opgevangen’.  Het programma voert een alternatieve actie uit wanneer de fout wordt gevonden en gaat vervolgens verder alsof er niks aan de hand is. Dit levert de volgende code op.


try {

        // 1. Code van een programma

        throw new Exception(“Crash!”);

        // 2. Meer code

} catch (Exception e) {

        // 3. Alternatieve code

}

Hierbij zal eerst stap 1 worden uitgevoerd. Hierna wordt de exceptie gegooid (In een normaal programma wordt dit uiteraard alleen gedaan onder specifieke omstandigheden). Vervolgens wordt punt 3 uitgevoerd. Opmerkelijk in dit voorbeeld is dat zowel de code die fout loopt als punt 2 worden overgeslagen. De code bij punt 3 zal er vervolgens voor moeten zorgen dat het programma alsnog in goede banen wordt geleid. Alles wat na de ‘catch’ komt wordt vervolgens weer normaal uitgevoerd en de daadwerkelijke crasht is voorkomen.

Aangepaste Exceptions

Het is echter nog mogelijk om verder specificeren wat er fout gaat in het programma. Hiermee kunnen betere maatregelen getroffen worden bij het herstellen van deze fouten. Dit wordt gedaan doormiddel van een aangepaste versie van een Exception, bijvoorbeeld:


public class IncorrecteEmailException: Exception {

}

public class IncorrecteAdresException : Exception {

}

Dit zijn twee nieuw aangemaakte Exceptions voor in dit geval het controleren van ingevoerde gegevens. Vervolgens kan bij het opvangen van de Exceptions onderscheid gemaakt worden in het type Exception. Zo zou bijvoorbeeld voor de ‘IncorrecteEmailException’ een specifieke melding aan de gebruiker kunnen worden getoond over dat het e-mail adres incorrect is. Dit zou tot de volgende code leiden:


public IactionResult slaGebruikersGegevensOp(UserData gebruikersGegevens) 
{
        try {

                // controleer gegevens
                if ( incorrecteEmail( gebruikersGegevens ) ) {

                        throw new IncorrecteEmailException(“Email was onjuist ingevoerd”);

                }

                if ( incorrecteAdressGegevens( gebruikersGegevens ) ) {

                        throw new IncorrecteAdresException (“Adres was onjuist ingevoerd”);

                }

                // sla de gegevens op

        } catch (IncorrecteEmailException e) {

                // toon de gebruiker een foutmelding dat de opgegeven email niet correct is

        } catch (incorrecteAdressGegevens e)

                // toon de gebruiker een foutmelding het opgegeven adres incorrect is

        } catch (Exception e) {

                // ongespecificeerde fouten

                // geef een algemene waarschuwing dat iets niet goed ging

                // of laat het herstel hiervan over aan bovenliggende code

                throw;
        }
}

Aan het eind van dit stuk code wordt gekeken of er een Exception is die niet herkend wordt. Er kan hierbij worden gekozen om een algemene foutmelding te geven of om het afhandelen hiervan over te laten aan een hoger niveau.

Het uiteindelijke doel van dit systeem is het voortijd afhandelen en oplossen van fouten, of het op de hoogte stellen van een gebruiker over deze fouten.


Op De Hoogte Blijven?

Online Succes realiseren is een vak, een vak wat wij verstaan en waarover we je graag vertellen. Schrijf je in voor onze maandelijkse nieuwsbrief en blijf op de hoogte van trends, thema’s en succesverhalen.

Aanhef

Andere blogartikelen

Bel 072 5345 888
Meer dan 40 bedrijven vertrouwen op ons
allrig.jpg
aliancys.jpg
eriks.jpg
heinen_en_hopman.jpg
handicare_stairlifts.jpg
Onze Middelen en Technologieën
Microsoft partner
Adobe partner
Asp dotnet
Google analytics
Google adwords
TelefoonE-mail