Uitzonderingen verwerken en genereren in .NET
Toepassingen moeten fouten kunnen verwerken die optreden tijdens de uitvoering op een consistente manier. .NET biedt een model voor het melden van toepassingen op een uniforme manier: .NET-bewerkingen geven fouten aan door uitzonderingen te genereren.
Uitzonderingen
Een uitzondering is een foutvoorwaarde of onverwacht gedrag dat wordt aangetroffen door een uitvoerend programma. Uitzonderingen kunnen worden gegenereerd vanwege een fout in uw code of in code die u aanroept (zoals een gedeelde bibliotheek), niet-beschikbare besturingssysteembronnen, onverwachte voorwaarden die de runtime tegenkomt (zoals code die niet kan worden geverifieerd), enzovoort. Uw toepassing kan herstellen van sommige van deze voorwaarden, maar niet van anderen. Hoewel u de meeste toepassingsuitzondering kunt herstellen, kunt u niet herstellen van de meeste runtime-uitzonderingen.
In .NET is een uitzondering een object dat wordt overgenomen van de System.Exception klasse. Er wordt een uitzondering gegenereerd vanuit een codegebied waar zich een probleem heeft voorgedaan. De uitzondering wordt doorgegeven aan de stack totdat de toepassing deze verwerkt of het programma wordt beëindigd.
Uitzonderingen versus traditionele methoden voor foutafhandeling
Traditioneel is het foutafhandelingsmodel van een taal afhankelijk van de unieke manier om fouten te detecteren en handlers voor hen te vinden, of op het mechanisme voor foutafhandeling dat wordt geleverd door het besturingssysteem. De manier waarop .NET uitzonderingsafhandeling implementeert, biedt de volgende voordelen:
Uitzonderingen die worden gegenereerd en verwerkt, werken hetzelfde voor .NET-programmeertalen.
Vereist geen specifieke taalsyntaxis voor het verwerken van uitzonderingen, maar staat elke taal toe om een eigen syntaxis te definiëren.
Uitzonderingen kunnen worden gegenereerd over proces- en zelfs machinegrenzen.
Code voor het verwerken van uitzonderingen kan worden toegevoegd aan een toepassing om de betrouwbaarheid van het programma te vergroten.
Uitzonderingen bieden voordelen ten opzichte van andere methoden voor foutmeldingen, zoals retourcodes. Fouten worden niet onopgemerkt omdat als er een uitzondering wordt gegenereerd en u deze niet verwerkt, de runtime uw toepassing beëindigt. Ongeldige waarden blijven niet door het systeem doorgegeven als gevolg van code die niet kan controleren op een fout retourcode.
Algemene uitzonderingen
De volgende tabel bevat enkele veelvoorkomende uitzonderingen met voorbeelden van wat ze kunnen veroorzaken.
Uitzonderingstype | Beschrijving | Voorbeeld |
---|---|---|
Exception | Basisklasse voor alle uitzonderingen. | Geen (gebruik een afgeleide klasse van deze uitzondering). |
IndexOutOfRangeException | Gegenereerd door de runtime alleen wanneer een matrix onjuist wordt geïndexeerd. | Een matrix indexeren buiten het geldige bereik:arr[arr.Length+1] |
NullReferenceException | Gegenereerd door de runtime alleen wanneer naar een null-object wordt verwezen. | object o = null; o.ToString(); |
InvalidOperationException | Gegenereerd door methoden wanneer deze een ongeldige status hebben. | Aanroepen Enumerator.MoveNext() na het verwijderen van een item uit de onderliggende verzameling. |
ArgumentException | Basisklasse voor alle argument-uitzonderingen. | Geen (gebruik een afgeleide klasse van deze uitzondering). |
ArgumentNullException | Gegenereerd door methoden die niet toestaan dat een argument null is. | String s = null; "Calculate".IndexOf(s); |
ArgumentOutOfRangeException | Gegenereerd door methoden die controleren of argumenten zich in een bepaald bereik bevinden. | String s = "string"; s.Substring(s.Length+1); |
Zie ook
- Uitzonderingsklasse en eigenschappen
- Procedure: De Try-Catch blokkeren gebruiken om uitzonderingen te vangen
- Procedure: Specifieke uitzonderingen gebruiken in een catch-blok
- Procedure: Expliciet uitzonderingen genereren
- Procedure: Uitzonderingen voor User-Defined maken
- Uitzonderingshandlers User-Filtered gebruiken
- Procedure: Ten slotte blokken gebruiken
- COM-interop-uitzonderingen verwerken
- Aanbevolen procedures voor uitzonderingen
- Wat elke dev moet weten over uitzonderingen in de runtime