Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

1 • Best practice for exception handling • Exception klasser • Division med nul uden exception handling • Division med nul med exception handling •. NET.

Lignende præsentationer


Præsentationer af emnet: "1 • Best practice for exception handling • Exception klasser • Division med nul uden exception handling • Division med nul med exception handling •. NET."— Præsentationens transcript:

1 1 • Best practice for exception handling • Exception klasser • Division med nul uden exception handling • Division med nul med exception handling •. NET exception hierarki • Finally blok • Using statement • Exception egenskaber (eng.: properties) & stack unwinding • Brugerdefinerede exception klasser Steen Jensen, efterår 2013

2  Stilen og detaljerne i C#’s exception handling er delvist baseret på Andrew Koenig & Bjarne Strupstrups ”Best Practices for Handling Exceptions [C#]  Se http://msdn.microsoft.com/en-us/library/seyhszts.aspxhttp://msdn.microsoft.com/en-us/library/seyhszts.aspx 2

3  Nedenstående figur viser hierarkiet af exception klasser i C# 3 Figur fra s. 440 i ”Computing with C#” af Art Gittleman

4 4  Eksemplet viser en app, der udfører en division – som tæller (eng.: numerator) og nævner (eng.: denominator) anvendes heltal/integers  Figur 13.1 viser forskellige situationer med og uden exceptions

5 5  Eksemplet fra figur 13.1 er nu udvidet med exception handling  Linje 11-44: løkke, der kører, sålænge der er fejl (continueLoop = true)  Linje 14-31: try blok, hvor de to heltal/integers indlæses, og resultat beregnes. Blokken afsluttes med at sætte continueLoop til false  Linje 32-37: catch blok, der håndterer FormatException  Linje 38-43: catch blok, der håndterer DivideByZeroException

6 6  Exception handling mekanismen i C# tillader kun objekter af klassen Exception (namespace System) at blive kastet og fanget (eng.: thow & catch)  Klassen Exception er basisklasse for.NET’s exception klasse-hierarki  En vigtig afledt klasse er SystemException:  fx indeksering af element uden for array  IndexOutOfRangeException  fx brug af reference-type variabel til at kalde en metode, og referencen er null  NullReferenceException  andre exceptions: OutOfMemoryException, StackOverflowException  For at finde ud af, hvornår en metode kan kaste (eng.: throw) en exception, kan man i Visual Studio gå ind under View + Object Browser. Under namespace System kan man se en liste over mulige exceptions

7 7  Programmer tildeler og frigiver (eng.: request & release) jævnligt ressourcer - fx fil åbnes …… fil lukkes til sidst  Hvis en ressource ikke frigives, opstår en såkaldt resource leak  I programmeringssprog såsom C & C++ er den mest almindelige ressource leak memory leak, hvor et program allokerer hukommelse (i C# via keyword new) men ikke deallokerer hukommelsen, når den ikke længere skal bruges  I C# er dette ikke noget problem p.g.a. automatisk garbage collection  Ved at bruge en finally blok sikres, at kode indeholdende deallokering af ressourcer altid udføres  Ud over en try blok skal der også være en catch og/eller en finally blok

8 8  Eksemplet viser, at en finally blok altid udføres, uanset om der opstår en exception eller ej. App’en består af 4 metoder: DoesNotThrowException, ThrowExceptionWithCatch, ThrowExceptionWithoutCatch og ThrowExceptionCatchRethrow  Linje 98 + 117: throw giver mulighed for manuelt at udløse en exception. Denne exception vil blive fanget af en tilhørende catch blok eller en finally, hvis der ikke er nogen catch  Linje 124: da throw står angivet uden parametre, betyder det, at den pgældende exception rethrow’es dvs. kastes tilbage til, hvor den blev kaldt. I dette tilfælde til Main-metoden

9 9  Eksemplet læser indholdet af tekstfilen ”messages.data” og udskriver hver linje fra filen på skærmen (try-blokken)  Hvis der opstår en IOException håndteres denne i catch-blokken  Uanset, om der har været fejl eller ej, udføres kode i finally blokken, hvor tekstfilen lukkes Eksempel fra s. 451 i ”Computing with C#” af Art Gittleman

10 10  Et alternativ til at placere ressource-release kode i en finally blok er at benytte det såkaldte using statement  Ved at benytte using placeres implicit kode i en try blok efterfulgt af en finally blok

11 11  Nedenstående kodestump er fra figur 17.5 klassen FileTestForm  Ved at benytte using vil der automatisk udføres en finally blok, der lukker filen

12 12  Exception typer afledes fra klassen Exception, som har flere egenskaber (eng.: properties) - vigtige egenskaber:  Message gemmer fejlmeddelelse tilknyttet et exception objekt  StackTrace repræsenterer method-call stack  InnerException angiver den oprindelige exception. Kan anvendes ved brugerdefinerede exceptions  HelpLink specificerer lokationen på en evt. hjælpefil  Source specificerer navnet på app eller objekt, der har forårsaget den pågældende exception  TargetSite angiver metoden, hvor den pågældende exception opstod

13 13  Eksemplet demonstrerer stack unwinding, som forekommer når en exception kastes (throw) men ikke fanges (catch) det pågældende sted i koden  Metodekaldet vil blive ”spolet tilbage” (eng.: unwound), og et forsøg laves på at fange den pågældende exception i den næste ydre try blok Method3 Method2 Method1 Main

14 14  Eksemplet udregner kvadratroden af et tal og viser endvidere, hvordan man kan oprette sin egen exception. (klassen NegativeNumberException i figur 13.6) – bemærk, at constructor findes i tre udgaver  Klassen bruges i catch blokken i figur 13.7, hvis der indtastes et negativt tal

15  Prøv at besvare øvelse 13.1 + 13.2 s. 554 uden at se svaret  Check derefter dine svar op imod svarene s. 554 15

16  Resten af dagen + fortsæt hjemme: 1. Ex. 13.10 s. 555 2. Hvis det giver mening, så læg fejlhåndtering (exception handling) ind i Spejdersystemet 16


Download ppt "1 • Best practice for exception handling • Exception klasser • Division med nul uden exception handling • Division med nul med exception handling •. NET."

Lignende præsentationer


Annoncer fra Google