Undtagelseshåndtering i C#

Relaterede dokumenter
Singleton pattern i Java

Anvendelse af metoder - Programmering

Delphi - CrackMe og Keygen

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

Exceptions i Delphi. Try except

SWC eksamens-spørgsmål. Oversigt

Send fra Java. Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende fra Java.

Hvilket sprog er hurtigst

Den forudsætter kendskab til XML og C# men ikke til brug af XML i C#.

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

Kontrol-strukturer i PHP

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

Arrays i PHP. Denne guide er oprindeligt udgivet på Eksperten.dk. Skrevet den 04. Feb 2009 af taskmgr I kategorien Programmering / PHP

I denne artikel vil vi bruge en User klasse som vi så vil gruppere på forskellige måder.

Upload af billeder/filer for nybegyndere Del. 2

Parameters. Denne artikel beskriver hvorfor parameters er gode. Den forudsætter lidt kendskab til C# og ADO.NET.

Singleton pattern i C#

Med register_globals = On får du automatisk adgang til en række variabelnavne i dit script.

I denne artikel vil du ved hjælp af arrays kunne afrunde et decimaltal til et helt tal.

Introduction til.net remoting i C#

Som sagt kræves der helst lidt viden om OOP hvis man virkelig vil lærer noget, og ikke bare lave copypaste

Den forudsætter kendskab til XML og VB.NET men ikke til brug af XML i VB.NET.

1B fil database. //globale variabler DateTime tid; // erklærer en variabel af typen datetime DateTime dag; // erklærer en variabel af typen datetime

Afsending af s vha. ASP

Skrevet den 18. Feb 2010 af arne_v I kategorien Programmering / Visual Basic.NET

Database design for begyndere

Hvad er Objekter - Programmering

Introduktion til funktioner, moduler og scopes i Python

Forskellige Java versioner

I mit script tager jeg højde for det problem ved, at gemme et unikt tal mellem 0-9 på 6 cifre og derved vil de så blive vist som 2 online.

vil jeg blive mindet om det af VBA allerede mens jeg skriver koden, da der er tale om en såkaldt kompileringsfejl:

Tilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge.

Introduction til.net remoting i VB.NET

Programmering for begyndere Lektion 2. Opsamling mm

Denne artikel er en detaljeret gennemgag af det fundamentale i batchfiler til hjemmebrug :-) FEEL THE POWER! ;-)

2) Det er let at være produktiv med Python, da Python som regel kun har mellem 67 og 80% færre linier end tilsvarende C eller Java kode.

Delphi og Databaser for begyndere

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

Udvikling af DOTNET applikationer til MicroStation i C#

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1

Simpel upload af filer

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

Ratingsystem i PHP og MySQL

I denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen.

At klippe en streng over på det mest hensigtsmæssige sted

Den forudsætter kendskab til C++ og lidt kendskab til SQL og MySQL C API.

Gæstebog med validering opbygget med MySQL

Visual Basic for begyndere

Det er primært relevant for dem hvor der arbejdes på en gammel bærbar computer, som ikke har en stærk processer og nok ram, at gøre godt med.

Brugerdefineret menuer i Access

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Endnu mere om tilfældige tal

Dynamisk PHP design OPDATERET

Kursus navn: Indledende programmering Kursus nr

PHP Pagination. Denne guide er oprindeligt udgivet på Eksperten.dk. Skrevet den 01. May 2011 af dab93 I kategorien Programmering / Andre

Sådan skriver du artikler til Eksperten!

Geografisk lokalisering i ASP.NET

Kapitel 4 Løkker i C#

Tagwall med Php & MySQL

Introduktion til AOP i C#

Prepared Statements. Denne artikel beskriver hvorfor prepared statements er gode. Den forudsætter lidt kendskab til Java og JDBC.

Lær Python dag 1 - modul 1

Begrynder til at lave log ind system

Offset til terminalskærm i Java

WINDOWS FORMS EVENTS INTERAGEREN MED FIL SYSTEMET. Grundlæggende programmering Lektion 9

Lige siden den elektroniske computers opfindelse i slutningen af 1940, har det været muligt at få en computer til at beregne ting.

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Noter til C# Programmering Selektion

Noter til C# Programmering Iteration

Kursusarbejde 1 Grundlæggende Programmering. Arne Jørgensen, klasse dm032-1a

Start på javascript. Denne guide er oprindeligt udgivet på Eksperten.dk. Skrevet den 03. Feb 2009 af webstuff I kategorien Programmering / JavaScript

CodeDOM - Dynamisk generering og kompilering af kode

Forelæsning Uge 4 Torsdag

Bits, bit operationer, integers og floating point

Plugin-arkitektur med.net

Software Construction 1 semester (SWC) Spørgsmål 1

.NET 4.5 og C# 5.0. Denne artikel beskriver nogle af de nye features i.net 4.5 og C# 5.0. Den forudsætter et vist kendskab til.net og C#.

Java Klasse nedarvninger

Abstrakte datatyper C#-version

Uploade billeder eller andre filer ved hjælp af php og mysql

Send fra Access.

Kursusarbejde 3 Grundlæggende Programmering

I denne artikel vil jeg gennemgå hvordan en side for RSS "Live Bogmærke" kan se ud.

PROGRAM. using System; using System.Collections.Generic; using System.Text; using System.Collections;

Kursusarbejde 2 Grundlæggende Programmering

Loginsystem (med MySQL)

Indholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Makrosikkerhed (Sikkerhedsindstillinger)...13

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

Derfor vil jeg bygge dette eksempel på een table hvor der kan tilkyttes personer til ALLE noder og der kan tilføjes et vilkårligt antal niveauer

Gør Administrator-brugeren til almindelig bruger

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter Abstract

MySQL C API. Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere.

Introduktion til SQL queries

Denne artikel er til dem der ønsker at vide mere om hvad CSS er og hvad CSS kan bruges til hvad angår WWW.

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Videregående programmering i Java

Lektion 6. Grundlæggende programmering i VR

Fotoalbum i Access - del 1

applikation----x----odbc driver manager----foobar ODBC driver----foobar database

Transkript:

Denne guide er oprindeligt udgivet på Eksperten.dk Undtagelseshåndtering i C# I modsætning til C++ kan man i C# ikke skrive et program uden undtagelseshåndtering, så derfor har jeg skrevet denne guide til hvordan men bruger det. Egne undtagelser er også med. Skrevet den 03. Feb 2009 af visualdeveloper I kategorien Programmering / C# Undtagelseshåndtering i C# Grunden til at jeg har valgt at skrive en artikel om undtagelseshåndtering i C# er, at det er en meget vigtig ting. En undtagelse er når Windows genererer en fejl - når dit program udfører en "ulovlig" handling. Fejlene kan opstå på mange forskellige måder, men man kan dele dem op i to grupper - dem men selv er skyld i som fx almindelige programmeringsfejl, og dem man ikke selv kan kontrollere som fx hvis der ikke er nok hukommelse til at programmet kan køre videre....finally Når man skal lave en undtagelseshåndtering i C# skal man bruge de tre nøgle ord, og finally. Det stykke kode som skal kunne kaste en undtagelse, sætter man i en -blok og koden der skal håndtere undtagelser fra -blokken, anbringer man i en -blok, og til sidst finally som bruges til oprydning som SKAL klares inden programmet afsluttes. Her er syntaksen for en undtagelseshåndtering i C#:...kode der kan generere fejl...fejlhåndtering finally...oprydning...dvs. at den kode der kan indeholde fejl, skrives i -blokken, den kode der skal håndtere fejlene, skrives i -blokken og den kode der skal ryde op sættes i finally-blokken. Her er et godt lille eksempel på brug af...: class Eksperten int i;

i++; Console.WriteLine("Fejl fundet!");...da det i C# er forbudt at bruge ikke-initialiserede variabler. (dvs at i ikke indeholder nogen værdi) kan man ikke lægge 1 til i og der genereres en fejl. Men da vi har lavet en undtagelseshåndtering, kommer Windows ikke med nogen pop-up men den går til -blokken som udskriver "Fejl fundet!". Mere specifikke fejl? Denne form for vi har brugt her er bare den simple...som fanger alle fejl. Hvis vi ønsker at fange mere specifikke fejl som fx. en division med 0. Her er et eksempel: class Eksperten int x = 0; int div = 0; div = 100/x; Console.WriteLine("Den linje bliver kompileret, men ikke udført!"); (DivideByZeroException de) Console.WriteLine("DivideByZeroException" ); Console.WriteLine("Alle andre Exceptions" ); finally Console.WriteLine("Finally-Blok"); Console.WriteLine("Resultatet er 0",div); Her bruger vi DivideByZeroException som fanger alle fejl der opstår når der bliver divideret med 0. Alle andre fejl bliver håndteret i den anden -blok. Alle undtagelser arver fra System.Exception.

Brug af finally Efter en - og en -blok kommer finally blokken som bruges til oprydning. Et godt eksempel på det er når vi åbner en fil og læser fra den, så skal vi sikre os at filen bliver lukket igen. Her er et eksempel på det: using System.IO; public class Eksperten StreamReader s = null; s = File.OpenText("c:\\fil.txt"); while (s.peek() > -1) Console.WriteLine(s.ReadLine()); //her læses der fra filen Console.WriteLine("Der opstod en fejl!"); //en fejlhåndtering finally if (s!= null) s.close(); //her lukkes filen hvis den stadig er åben Objektorinterede undtagelser Alt I C# er objektorinteret, og derfor er undtagelser også objekter med egenskaber. Nogle af disse egenskaber kan være godt at kende. Her er et eksempel på brug af dem: public class Eksperten string s = "Eksperten"; int i = Int32.Parse(s); (Exception e) Console.WriteLine("Der er opstået en fejl");

Console.WriteLine("Meddelelse: 0", e.message); Console.WriteLine("TargetSite: 0", e.targetsite); Console.WriteLine("Kilde: 0", e.source); Her finder vi de tre egenskaber af objektet e (Exception). Message som viser fejlmeddelelsen, TargetSite som viser den metode hvor undtagelsen opstod og Source som viser applikationsnavnet. I mit eksempel prøver vi at konvertere en String til en Integer men det kan vi ikke da en Integer kun kan indeholde heltal og derfor opstår der en fejl, som så bliver håndteret i -blokken. Egne undtagelser - NYT Ud over.net-kernens undtagelser, kan du også lave eller kaste dine egne undtagelser som det jo hedder. Det gøres ved at bruge nøgleordet throw og nøgleordet new. Denne mulighed kan være praktisk hvis du ikke lige kan finde en exception-klasser der passer til dit program. Her er et eksempel på hvordan man kaster sine egne undtagelser: public class Eksperten string Tmp; DateTime Dato; Console.WriteLine("Indtast en dato, der ligger før dags dato"); Tmp = Console.ReadLine(); Dato = DateTime.Parse(Tmp); throw new Exception("Ikke en gyldig dato"); if (Dato >= DateTime.Now) throw new Exception("Dato skal ligge før dags dato"); Console.WriteLine("Du har indtastet 0:d", Dato); (Exception e) Console.WriteLine(e.Message);

Først kontrolleres om den indtastede dato kan konverteres til en gyldig dato. Hvis ikke det kan lade sig gøre, genereres en undtagelse med throw-nøgleordet, som her: Indtast en dato, der ligger før dags dato 01-099-2006 Ikke en dato Eller hvis datoen ligger før dags dato: Indtast en dato, der ligger før dags dato 01-06-1999 Dato skal ligge før dags dato Du har indtastet 01-06-1999 Det var så det...nu skulle du gerne kunne lidt mere...bare LIDT mere om exceptions i C#. Har du kritik, spørgsmål eller idéer til artiklen så skriv det i din anmeldelse eller i dette spørgsmål: http://www.exp.dk/spm/656878 Skriver du en anmeldelse, herunder, så skriv lige en begrundelse! Kommentar af skwat d. 18. Oct 2005 1 class hatconsole.writeline("hat"); er som jeg kan se et eksempel på et program uden error handling Kommentar af brilleaben d. 18. Oct 2005 2 For kort - hvad med at beskrive hvordan egen exceptions kreeres og håndteres? Kommentar af mysitesolution d. 19. Oct 2005 3 okay artikel... men hhm... har du ikke lært at fx i = i + 1; er langsommere end i++; og tilmed fylder det mere... Kommentar af imago-dei d. 01. May 2006 4 God artikel. Jeg vil dog påpege at der er uenighed om hvordan exceptions skal behandles. Se. feks. denne artikel: http://codebetter.com/blogs/karlseguin/archive/2006/04/05/142355.aspx. Til kommentarerne nedenunder: jeg har lidt svært ved at tro at i = i +1 skal være langsommere runtime end i++. Begge dele bliver vel oversat til præcis det samme i compileren. Kommentar af computerpeter d. 05. Nov 2005 5 Kommentar af ino d. 28. Mar 2006 6 God... Men kunne du ikke lave indryk i den kode du skriver for der er ret svært at læse...

Kommentar af iostream d. 20. Oct 2005 7 God artikel..jeg kan se at egne undtagelser kommer snart :-) forresten er i = i + 1; rettet til i++; så nu er den god! Kommentar af yezbarh d. 17. Oct 2005 8 Kort, men ellers fin Kommentar af peter_bf d. 21. Oct 2005 9 Han har altså rettet det hele, og egne exceptions er også tilføjet så jeg kan ikke sige andet end top :D