MSDN Webcast: VB.NET für Einsteiger und Umsteiger, Teil 7 Strukturierte Ausnahmebehandlung (Level 100) Presenter: Daniel Walzenbach Technologieberater Microsoft Deutschland GmbH
Verlosung Programmieren lernen mit Visual Basic Bücher werden unter allen Teil- nehmern verlost, die an mindes- tens sieben Webcasts teilnehmen
Visual Studio 2005 Express Kleine Geschwister des Visual Studio 2005 Kostenlos studio/products/express/vb/default.mspx studio/products/express/vb/default.mspx Visual Basic 2005 Express Edition Visual C# 2005 Express Edition Visual C Express Edition Visual Web Developer 2005 Express Edition SQL Server 2005 Express Edition
Agenda Übungsaufgabe Teil 6 Strukturierte Ausnahmebehandlung ÜbungsaufgabeZusammenfassung
Übungsaufgabe, Teil 6 Schreiben Sie die zwei Klassen Amateurspieler und Profispieler Beide Klassen sollen ein Interface ISpieler implementieren Property SpielerName Property Position Methode Torschiessen Schreiben Sie eine Methode welche die Namen, Position und geschossenen Tooooore der Spieler ausgibt
Demonstration #1 demo Übungsaufgabe, Teil 6
Refactoring Übungsaufgabe 6 Refactoring
Agenda Übungsaufgabe Teil 6 Strukturierte Ausnahmebehandlung ÜbungsaufgabeZusammenfassung
Was sind Ausnahmen? Ausnahmen sind unvorhergesehene Ereignisse während der Programmausführung Das Behandeln von Ausnahmen wird als strukturierte Ausnahmenbehandlung bezeichnet Im Fall einer Ausnahme wird ein spezieller Programmteil ausgeführt Es gibt KEINE globale Fehlerbehandlung Fehlerbehandlung bezieht sich immer auf einen (beliebig großen) Codeblock in einer Methode
Wann treten Ausnahmen auf? Ausnahmen treten auf, wenn die CLR einen Befehl NICHT ausführen kann Division durch 0 Ansprechen eines nicht initialisierten Feldes Zugriff auf eine nicht existente Datei … Sub Main() Dim i, j As Integer i = j / 0 Console.WriteLine(j) End Sub
Demonstration #2 demo Ausnahmen in.NET
Behandeln von Ausnahmen Ausnahmen in.NET werden durch Objekte der Klasse Exception dargestellt Es gibt unterschiedliche Arten (Spezialisierungen) von Ausnahmen Alle Ausnahmen erben von System.Exception
Behandeln von Ausnahmen Das Programm und nicht die CLR soll sich um die Ausnahme kümmern Befehle, die zu einer Ausnahme führen könnten, müssen in einem Try…Catch Block eingeschlossen sein Dim i, j As Integer Try i = j / 0 Console.WriteLine("Ergebnis: {0}", j) Catch Console.WriteLine("Division durch 0 ist nicht erlaubt!") End Try
Informationen zu Ausnahmen Was war die Ursache für die Ausnahme? Variable vom Typ der Ausnahme nach Catch deklarieren. Enthält das zuständige Exception Objekt beim Auftreten einer Ausnahme Dim i, j As Integer Try i = j / 0 Console.WriteLine("Ergebnis: {0}", j) Catch ex As Exception Console.WriteLine(ex.Message) End Try
Demonstration #3 demo Informationen zu Ausnahmen abfragen
Informationen zu Ausnahmen Exception ist die allgemeinste Ausnahme Spezifische Ausnahmen für verschiedene Ausnahmebehandlungen Try Dim DateiInhalt As String DateiInhalt = My.Computer.FileSystem.ReadAllText("C:\temp\HelloWorld.txt") Console.WriteLine(DateiInhalt) Catch ex As IO.FileNotFoundException Console.WriteLine("Datei ist nicht vorhanden.") Catch ex As ArgumentException Console.WriteLine("Ungültigen Dateinamen angegeben.") Catch ex As Exception Console.WriteLine("Ein unbekannter Fehler ist aufgetreten.") Console.WriteLine(ex.Message) Console.WriteLine(ex.StackTrace) End Try Reihenfolge beachten Abfrage der Ausnahmen in der Reihenfolge der Spezialisierung. Von speziell nach allgemein. Ansonsten werden die speziellen Fehler nicht behandelt!
Demonstration #4 demo Detailinformationen zu Ausnahmen abfragen
Abschließend Ein Codeblock soll auf jeden Fall (Ausnahme oder nicht) ausgeführt werden Try Dim DateiInhalt As String DateiInhalt = My.Computer.FileSystem.ReadAllText("C:\temp\HelloWorld.txt") Console.WriteLine(DateiInhalt) Catch ex As IO.FileNotFoundException Console.WriteLine("Datei ist nicht vorhanden.") Catch ex As ArgumentException Console.WriteLine("Ungültigen Dateinamen angegeben.") Catch ex As Exception Console.WriteLine("Ein unbekannter Fehler ist aufgetreten.") Console.WriteLine(ex.Message) Console.WriteLine(ex.StackTrace) Finally ' Aufräumarbeiten End Try Der Finally -Block wird immer – unabhängig von dem Auftreten einer Ausnahme – ausgeführt. In diesem Block werden für gewöhnlich Aufräumarbeiten getätigt (Schließen einer Datenbankverbindung, etc.).
Demonstration #5 demoFinally
Event Bubbling Was passiert bei verschachtelten Methoden wenn die innere Methode keine Ausnahmebehandlung implementiert? Sub Main() Try methode1() Catch ex As Exception Console.WriteLine(ex) End Try End Sub Public Sub methode1() methode2() End Sub Public Sub methode2() Dim i, j As Integer i = j / 0 Console.WriteLine("Ergebnis: {0}", j) End Sub Die Ausnahme wandert wie eine Blase im Wasser den Call Stack nach oben bis eine Ausnahmebehandlung gefunden wird. Falls keine Ausnahmebehandlung vorhanden ist greift die Standardbehandlung der CLR.
Demonstration #6 demo Event Bubbling
Ausnahmen werfen Manchmal kann es notwendig sein, eine abgefangene Ausnahme an die aufrufende Methode zurückzuwerfen Ausnahmen können mit dem Befehl Throw geworfen werden Die ursprüngliche Ausnahme kann als Parameter übergeben werden und ist dann als InnerException verfügbar Catch ex As Exception Throw New Exception("Ein unbekannter Fehler ist aufgetreten", ex) Console.WriteLine(ex.InnerException.Message)
Sub main() Try DateiAusgeben("c:\temp\Hello World.txt") Catch ex As Exception Console.WriteLine(ex.Message) Console.WriteLine(ex.InnerException.Message) End Try End Sub Public Sub DateiAusgeben(ByVal Dateiname As String) Try Dim DateiInhalt As String DateiInhalt = My.Computer.FileSystem.ReadAllText(Dateiname) Console.WriteLine(DateiInhalt) Catch ex As IO.FileNotFoundException Throw New Exception("Datei ist nicht vorhanden.", ex) Catch ex As Exception Throw New Exception("Ein unbekannter Fehler ist aufgetreten.", ex) End Try End Sub Ausnahmen werfen
Demonstration #7 demo Ausnahmen werfen und InnerExceptions
Eigene Ausnahmen Eine Klasse soll eigene Fehlermeldungen mit Throw an Programmteile werfen können, welche die Klasse instanziiert haben Eigene Ausnahmeklassen werden von ApplicationException abgeleitet Im Konstruktor muss der Konstruktor der Basisklasse aufgerufen werden
Eigene Ausnahmen Public Class AmateurException Inherits ApplicationException Public Sub New() End Sub Public Sub New(ByVal nachricht As String) MyBase.New() Console.WriteLine(nachricht) End Sub Public Sub New(ByVal nachricht As String, ByVal ex As Exception) MyBase.New(nachricht, ex) End Sub End Class
Demonstration #8 demo Eigene Ausnahmen
Agenda Übungsaufgabe Teil 6 Strukturierte Ausnahmebehandlung ÜbungsaufgabeZusammenfassung
Agenda Übungsaufgabe Teil 6 Strukturierte Ausnahmebehandlung ÜbungsaufgabeZusammenfassung
Zusammenfassung Ausnahmen sind unvorhergesehene Ereignisse während der Programmausführung Ausnahmen treten auf, wenn die CLR einen Befehl NICHT ausführen kann Ausnahmen in.NET werden durch Objekte der Klasse Exception dargestellt Try…Catch…Finally Mit Throw können Ausnahmen geworfen werden Eigene Ausnahmen werden von ApplicationException ableiten
Nächste Termine VB.NET für Einsteiger und Umsteiger, Teil 8 Arrays Montag, :00-17:00 Uhr
Übungsaufgabe Implementieren Sie Fehlerbehandlung für das Programm Kreisinhalt berechnen aus Webcast #2 Schreiben Sie ein Programm welches den Kreisinhalt (A) berechnet. A = πr² Verwenden Sie Console.WriteLine() und/oder Console.Write() und/oder Console.ReadLine() und System.Math.PI Bitte geben Sie den Radius des Kreises in cm ein: 5 Der Kreisinhalt eines Kreises mit Radius 5cm beträgt ca. 78,5cm².
Referenzen & Downloads Objektorientiertes Programmieren in Visual Basic de/library/b86b82w0(VS.80).aspx de/library/b86b82w0(VS.80).aspxClass-Anweisung de/library/wa0hwf23(VS.80).aspx de/library/wa0hwf23(VS.80).aspx Vererbung in Visual Basic de/library/5x4yd9d5(VS.80).aspx de/library/5x4yd9d5(VS.80).aspx Schnittstellen in Visual Basic de/library/28e2e18x(VS.80).aspx de/library/28e2e18x(VS.80).aspx
Referenzen & Downloads Ausnahme- und Fehlerbehandlung in Visual Basic de/library/s6da8809(VS.80).aspx de/library/s6da8809(VS.80).aspx Microsoft Visual Basic Das Entwicklerbuch buchversand.de/mspress/product.asp?cnt=product&id= ms-537&lng=0 buchversand.de/mspress/product.asp?cnt=product&id= ms-537&lng=0 MSDN Solve, Antworten für Entwickler
Questions and Answers Daniel Walzenbach