1 / 16

Exception handling 2

Exception handling 2. 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

walter
Download Presentation

Exception handling 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Exception handling 2 • 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) & stackunwinding • Brugerdefinerede exception klasser • Steen Jensen, efterår 2013

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

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

  4. Division med nul uden exception handling (figur 13.1 s. 526) • 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. Division med nul med exception handling (figur 13.2 s. 529) • 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 continueLooptil false • Linje 32-37: catch blok, der håndtererFormatException • Linje 38-43: catch blok, der håndterer DivideByZeroException

  6. .NET exception hierarki • Exception handling mekanismen i C# tillader kun objekter af klassen Exception(namespaceSystem) at blive kastet og fanget (eng.: thow & catch) • Klassen Exceptioner basisklasse for .NET’sexception 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 namespaceSystem kan man se en liste over mulige exceptions

  7. Finallyblok • 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 resourceleak • I programmeringssprog såsom C & C++ er den mest almindelige ressource leakmemoryleak, hvor et program allokerer hukommelse (i C# via keywordnew) 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 tryblok skal der også være en catchog/eller en finally blok

  8. Eksempel 1 med finallyblok (figur 13.4 s. 537) • Eksemplet viser, at en finallyblok altid udføres, uanset om der opstår en exception eller ej. App’en består af 4 metoder: DoesNotThrowException, ThrowExceptionWithCatch, ThrowExceptionWithoutCatchog ThrowExceptionCatchRethrow • Linje 98 + 117: throwgiver mulighed for manuelt at udløse en exception. Denne exception vil blive fanget af en tilhørende catchblok eller en finally, hvis der ikke er nogen catch • Linje 124: da throwstår angivet uden parametre, betyder det, at den pgældendeexceptionrethrow’esdvs. kastes tilbage til, hvor den blev kaldt. I dette tilfælde til Main-metoden

  9. Eksempel 2 med finallyblok (fra s. 451 i ”Computingwith C#” af Art Gittleman) • 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 finallyblokken, hvor tekstfilen lukkes Eksempel fra s. 451 i ”Computing with C#” af Art Gittleman

  10. Usingstatement, 1 • Et alternativ til at placere ressource-release kode i en finally blok er at benytte det såkaldte usingstatement • Ved at benytte using placeres implicit kode i en try blok efterfulgt af en finallyblok

  11. Usingstatement, 2 • Nedenstående kodestump er fra figur 17.5 klassen FileTestForm • Ved at benytte usingvil der automatisk udføres en finally blok, der lukker filen

  12. Exceptionegenskaber (eng.: properties) • Exception typer afledes fra klassen Exception, som har flere egenskaber (eng.: properties) - vigtige egenskaber: • Message gemmer fejlmeddelelse tilknyttet et exceptionobjekt • StackTracerepræsenterer method-callstack • InnerExceptionangiver den oprindelige exception. Kan anvendes ved brugerdefinerede exceptions • HelpLinkspecificerer lokationen på en evt. hjælpefil • Source specificerer navnet på app eller objekt, der har forårsaget den pågældende exception • TargetSiteangiver metoden, hvor den pågældende exception opstod

  13. Eksempel med exceptionproperties& stackunwinding(figur 13.5 s. 544) • Eksemplet demonstrerer stackunwinding, 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. Eksempel med brugerdefineret (eng.: user-defined) exceptionklasse(figur 13.6 s. 548 + 13.7 s. 549) • Eksemplet udregner kvadratroden af et tal og viser endvidere, hvordan man kan oprette sin egen exception. (klassen NegativeNumberExceptioni 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. Øvelser exception handling – i klassen Prøv at besvare øvelse 13.1 + 13.2 s. 554 uden at se svaret Check derefter dine svar op imod svarene s. 554

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

More Related