Undtagelseshåndtering i C#
|
|
|
- Thor Torp
- 8 år siden
- Visninger:
Transkript
1 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;
2 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.
3 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");
4 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);
5 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 Ikke en dato Eller hvis datoen ligger før dags dato: Indtast en dato, der ligger før dags dato Dato skal ligge før dags dato Du har indtastet 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: Skriver du en anmeldelse, herunder, så skriv lige en begrundelse! Kommentar af skwat d. 18. Oct class hatconsole.writeline("hat"); er som jeg kan se et eksempel på et program uden error handling Kommentar af brilleaben d. 18. Oct For kort - hvad med at beskrive hvordan egen exceptions kreeres og håndteres? Kommentar af mysitesolution d. 19. Oct 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 God artikel. Jeg vil dog påpege at der er uenighed om hvordan exceptions skal behandles. Se. feks. denne artikel: 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 Kommentar af ino d. 28. Mar God... Men kunne du ikke lave indryk i den kode du skriver for der er ret svært at læse...
6 Kommentar af iostream d. 20. Oct 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 Kort, men ellers fin Kommentar af peter_bf d. 21. Oct Han har altså rettet det hele, og egne exceptions er også tilføjet så jeg kan ikke sige andet end top :D
Singleton pattern i Java
Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i Java Denne artikel beskriver Singleton pattern og implementation i Java. Den forudsætter kendskab til Java men ikke til Singleton.
Anvendelse af metoder - Programmering
Denne guide er oprindeligt udgivet på Eksperten.dk Anvendelse af metoder - Programmering En forhåbentlig rigtig god forklaring på hvad metoder er og hvordan de anvendes. Lidt om private og public, retur
Delphi - CrackMe og Keygen
Denne guide er oprindeligt udgivet på Eksperten.dk Delphi - CrackMe og Keygen Dette er min første artikel! :) Men jeg synes nu den er blevet meget god! :D Jeg giver et et eksempel på hvordan man kan lave
//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!
Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for
SWC eksamens-spørgsmål. Oversigt
SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition
University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2
DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld
RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).
Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer
University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3
DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget
I denne artikel vil du ved hjælp af arrays kunne afrunde et decimaltal til et helt tal.
Denne guide er oprindeligt udgivet på Eksperten.dk Afrund til helt tal I denne artikel vil du ved hjælp af arrays kunne afrunde et decimaltal til et helt tal. Skrevet den 03. Feb 2009 af tjomsen I kategorien
Database design for begyndere
Denne guide er oprindeligt udgivet på Eksperten.dk Database design for begyndere Denne artikel beskriver hvordan man kommer fra ide til database design. Den stopper inden normal former. Den forudsætter
Hvad er Objekter - Programmering
Denne guide er oprindeligt udgivet på Eksperten.dk Hvad er Objekter - Programmering En rigtig god gennemgang af hvad objekter er! Hvordan de oprettes og anvendes! Det er helt klart til nybegyndere, som
Introduktion til funktioner, moduler og scopes i Python
Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til funktioner, moduler og scopes i Python Denne artikel er fortsættelsen af "I gang med Python", som blevet publiceret her på sitet for
Forskellige Java versioner
Denne guide er oprindeligt udgivet på Eksperten.dk Forskellige Java versioner Denne artikel beskriver lidt om de forskellige Java versioner. Den forklarer J2SE/J2ME/J2EE, plugin/jre/sdk og Sun Java/Microsoft
vil jeg blive mindet om det af VBA allerede mens jeg skriver koden, da der er tale om en såkaldt kompileringsfejl:
Fejlhåndtering Selv de bedste programmører laver af og til fejl! Dette kommer sikkert som en overraskelse for de fleste, bortset fra de, der har arbejdet med et hvilket som helst større program. Fejl kan
Programmering for begyndere Lektion 2. Opsamling mm
Lektion 2 Opsamling mm God tone Der er indlagt spørge sessioner Lektion 2 - Agenda Programmering for Lidt ændringer til teknikken, herunder hvordan du genser en lektion Lidt generelle tilbagemeldinger
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.
Denne guide er oprindeligt udgivet på Eksperten.dk I gang med Python I denne artikel vil jeg forsøge at give et kort og hurtigt indblik i programmeringssproget Python, der desværre er alt for overset.
Delphi og Databaser for begyndere
Denne guide er oprindeligt udgivet på Eksperten.dk Delphi og Databaser for begyndere Denne artikel handler om hvordan man udnytter noget af det bedste i Delphi: Dets gode muligheder for integrering med
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
Denne guide er oprindeligt udgivet på Eksperten.dk 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 Den forudsætter
Udvikling af DOTNET applikationer til MicroStation i C#
Udvikling af DOTNET applikationer til MicroStation i C# Praktiske tips for at komme i gang. Gunnar Jul Jensen, Cowi Hvorfor nu det? Mdl og Vba kan det hele Fordelene er : udviklingsmiljøet er eksternt
Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:
Denne guide er oprindeligt udgivet på Eksperten.dk SQL og ASP En artikel omkring simpel SQL og hvordan disse opbygges, udformes og udføres, sådan at man kan få et brugbart resultat i ASP. Dette ligefra
Gæstebog med validering opbygget med MySQL
Denne guide er oprindeligt udgivet på Eksperten.dk Gæstebog med validering opbygget med MySQL Dette er en simpel gæstebog, som kan hjælpe folk med at lave en velfungerende gæstebog uden alt for meget arbejde.
Visual Basic for begyndere
Denne guide er oprindeligt udgivet på Eksperten.dk Visual Basic for begyndere I denne artikel vil jeg gennemgå Visual Basic (IKKE.NET / Visual Basic 2005 Express Edition) på et begynder-niveau. fed kursiv
Kursus navn: Indledende programmering Kursus nr. 02101
Danmarks Tekniske Universitet Side 1 af 8 sider Skriftlig prøve, den 15. december 2007 Kursus navn: Indledende programmering Kursus nr. 02101 Tilladte hjælpemidler: Alle skriftlige hjælpemidler Vægtning
Sådan skriver du artikler til Eksperten!
Denne guide er oprindeligt udgivet på Eksperten.dk Sådan skriver du artikler til Eksperten! Når du skriver artikler handler det om at få den ud til de rigtige personer, og vise den frem så den er let forståelig.
Kapitel 4 Løkker i C#
Kapitel 4 Løkker i C# Løkker en vigtig del af alle programmeringssprog, og C# er ikke andeles. En løkke er en måde at udføre en del af koden gentagne gange. Ideen er at du fortsætter med at udføre en opgave
Tagwall med Php & MySQL
Denne guide er oprindeligt udgivet på Eksperten.dk Tagwall med Php & MySQL Her laver vi en tagwall i Php & MySQL... jeg forklarer dog ikke så meget, men jeg håber du kan få det til at blive til en tagwall
Lær Python dag 1 - modul 1
Lær Python dag 1 - modul 1 Introduktion, basis python Steffen Berg Klenow Jonas Bamse Andersen Syddansk Universitet Indhold 1. Velkommen 2. Programmering i python 3. Typer, variabler og udtryk 1 Velkommen
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.
Indledning...2 Variabler...13 Eksempel: 1...13 Eksempel 2:...13 Eksempel 3:...15 Eksempel 4:...16 Metoder...17 Metode (intet ind og intet ud)...17 Metode (tekst ind)...18 Metode (tekst ind og tekst ud)...19
Noter til C# Programmering Selektion
Noter til C# Programmering Selektion Sætninger Alle sætninger i C# slutter med et semikolon. En sætning kontrollerer sekvensen i programafviklingen, evaluerer et udtryk eller gør ingenting Blanktegn Mellemrum,
Noter til C# Programmering Iteration
Noter til C# Programmering Iteration Programflow Programmer udfører det meste af deres arbejde vha. forgrening og løkker. Løkker Mange programmeringsproblemer kan løses ved at gentage en handling på de
Bits, bit operationer, integers og floating point
Denne guide er oprindeligt udgivet på Eksperten.dk Bits, bit operationer, integers og floating point Denne artikel beskriver hvordan data gemmes som bits og hvordan man kan manipulere med bits. Den forudsætter
Software Construction 1 semester (SWC) Spørgsmål 1
Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /
.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#.
Denne guide er oprindeligt udgivet på Eksperten.dk.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#. Skrevet den 11.
Abstrakte datatyper C#-version
Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype
Send fra Access.
Denne guide er oprindeligt udgivet på Eksperten.dk Send e-mail fra Access. Denne artikel et rettet mod begyndere i Access. Artiklen viser hvordan du sender elektronisk post fra Access, både ved hjælp af
Kursusarbejde 3 Grundlæggende Programmering
Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................
PROGRAM. using System; using System.Collections.Generic; using System.Text; using System.Collections;
PROGRAM using System; using System.Collections.Generic; using System.Text; using System.Collections; namespace EventManager class Program static void Main(string[] args) string hovedmenu = ""; string svar;
Kursusarbejde 2 Grundlæggende Programmering
Kursusarbejde 2 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 31. oktober 2003 Indhold 1. Kode 2 1.1. hotel.h.................................................... 2 1.2. hotel.cc...................................................
Indholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Makrosikkerhed (Sikkerhedsindstillinger)...13
1 Indholdsfortegnelse Forord...8 Makroer samt aktivere Udvikler-fanen...10 Hvad er en makro... 10 Hvad kan du bruge en makro til... 10 Hvad en makro er (Visual Basic for Applications)... 11 Det hele sker
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) int wmid, wmevent; PAINTSTRUCT Introduktion ps; til HDC hdc; programmering med switch (message) case WM_COMMAND: wmid = LOWORD(wParam);
Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract
Sproget Six Til brug i rapportopgaven på kurset Oversættere Vinter 2006 Abstract Six er baseret på det sprog, der vises i figur 6.2 og 6.4 i Basics of Compiler Design. Den herværende tekst beskriver basissproget
MySQL C API. Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere.
Denne guide er oprindeligt udgivet på Eksperten.dk MySQL C API Denne artikel beskriver hvordan man bruger MySQL C API. Der er beskrivelse af build med forskellige compilere. Den forudsætter lidt kendskab
Introduktion til SQL queries
Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til SQL queries Denne artikel beskriver nogle forskellige muligheder i SQL queries. Eksemplerne skulle gerne være standard SQL og virke i
Denne artikel er til dem der ønsker at vide mere om hvad CSS er og hvad CSS kan bruges til hvad angår WWW.
Denne guide er oprindeligt udgivet på Eksperten.dk CSS - en gennemgang Denne artikel er til dem der ønsker at vide mere om hvad CSS er og hvad CSS kan bruges til hvad angår WWW. Der er lidt CSS historie
Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java
Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger
Videregående programmering i Java
Videregående programmering i Java Dag 6 Komponenter (og lidt Swing og MVC) Læsning: VP 4, evt. VP 6 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Grafiske komponenter
Fotoalbum i Access - del 1
Denne guide er oprindeligt udgivet på Eksperten.dk Fotoalbum i Access - del 1 Målet med artiklen er at læseren bliver i stand til at lave et "Fotoalbum" i Access (2000) samt nok så vigtigt at denne får
