Program.cs 3.22 KB
Newer Older
Uwe Wienkop's avatar
Uwe Wienkop committed
1 2 3 4 5 6 7 8
using System;

namespace _06_UebgDiExceptions
{
    // Erstellen Sie eine Dummy-Methode Funktion1, die einen try-catch Block enthält und 
    // eine zweite Dummy-Methode Funktion2, die wiederum einen try-catch Block besitzt und
    // eine Methode Funktion3, die bei ihrem Aufruf einen throw mit einer selbst
    // erstellten Fehlerklasse zur Folge hat. Main ruft Funktion1, Funktion1 ruft Funktion2 
Uwe Wienkop's avatar
Uwe Wienkop committed
9
    // und Funktion2 ruft Funktion3. Setzen Sie hinter die catches jeweils ein finally
Uwe Wienkop's avatar
Uwe Wienkop committed
10
    // Schreiben Sie entsprechende catch-Methoden, werfen Sie den Fehler weiter
Uwe Wienkop's avatar
Uwe Wienkop committed
11
    // und stellen Sie sicher, dass das Programm unter keinen Umständen mit einer Exception beendet wird!
Uwe Wienkop's avatar
Uwe Wienkop committed
12 13 14 15 16 17 18 19
    class MyAppExceptions : Exception
    {
        public int fehlerwert;
        public MyAppExceptions(string Fehlertext, int fehlerwert) : base(Fehlertext)
        {
            this.fehlerwert = fehlerwert;
        }
    }
Uwe Wienkop's avatar
Uwe Wienkop committed
20 21
    class Program
    {
Uwe Wienkop's avatar
Uwe Wienkop committed
22
        static void Funktion1()
Uwe Wienkop's avatar
Uwe Wienkop committed
23
        {
Uwe Wienkop's avatar
Uwe Wienkop committed
24
            Console.WriteLine("Funktion1");
Uwe Wienkop's avatar
Uwe Wienkop committed
25 26
            try
            {
Uwe Wienkop's avatar
Uwe Wienkop committed
27 28 29 30 31 32 33 34 35 36 37
                Funktion2();
                Console.WriteLine("Letzte Anweisung des try-Blocks von Funktion 1");
            }
            catch (ArgumentException)
            { }
            finally
            {
                Console.WriteLine("Finally von Funktion 1");
            }
            Console.WriteLine("Ende von Funktion1");
        }
Uwe Wienkop's avatar
Uwe Wienkop committed
38

Uwe Wienkop's avatar
Uwe Wienkop committed
39 40 41 42 43 44
        static void Funktion2()
        {
            Console.WriteLine("Funktion2");
            try
            {
                Funktion3();
Uwe Wienkop's avatar
Uwe Wienkop committed
45 46 47
                //Funktion3b();
                //if (errno != 0)
                //    Console.WriteLine("In Funktion 3b ist ein Fehler passiert");
Uwe Wienkop's avatar
Uwe Wienkop committed
48 49
                Console.WriteLine("Letzte Anweisung des try-Blocks von Funktion 2");
            }
Uwe Wienkop's avatar
Uwe Wienkop committed
50 51
            catch(MyAppExceptions e)   // Fängt MyAppExceptions und alle Exceptions, die 
                                       // von MyAppExceptions abgeleitet sind
Uwe Wienkop's avatar
Uwe Wienkop committed
52 53 54 55
            {
                Console.WriteLine($"catch in Funktion 2: {e.Message}, {e.fehlerwert}");
                throw;
            }
Uwe Wienkop's avatar
Uwe Wienkop committed
56 57 58 59 60 61
            finally
            {
                Console.WriteLine("Finally von Funktion 2");
            }
            Console.WriteLine("Ende von Funktion2");
        }
Uwe Wienkop's avatar
Uwe Wienkop committed
62 63 64 65 66
        static void Funktion3()
        {
            Console.WriteLine("Funktion3");
            int x = 2;
            if (1 < x)
Uwe Wienkop's avatar
Uwe Wienkop committed
67 68
                throw new DivideByZeroException("Fehler in F3");
                //throw new MyAppExceptions("Fehler in Funktion3", 4711);
Uwe Wienkop's avatar
Uwe Wienkop committed
69 70 71 72 73 74 75 76 77
            Console.WriteLine("Ende von Funktion3");
        }
        static int errno=0;
        static void Funktion3b()
        {
            int x = 0;
            errno = 9999;
            int y = 3 / x;
        }
Uwe Wienkop's avatar
Uwe Wienkop committed
78 79
        static void Main(string[] args)
        {
Uwe Wienkop's avatar
Uwe Wienkop committed
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
            bool fehler;
            do
            {
                // Init ...
                try
                {
                    fehler = false;
                    Funktion1();
                }
                catch (Exception)
                {
                    Console.WriteLine("Allgemeiner Fehler");
                    fehler = true;
                    // Neuinitialisierung ...
                }
            } while (fehler == true);
Uwe Wienkop's avatar
Uwe Wienkop committed
96 97 98
        }
    }
}