Announcement

Collapse
No announcement yet.

Eigene Exception werfen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Eigene Exception werfen

    Hallo Community,
    ich bin gerade dabei mal zu üben wie ich Eigene Exeptions werfe.

    habe dazu folgenden Code geschrieben:

    [highlight=c#]using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    namespace KL01_A2
    {
    public class NegativException : Exception
    {
    public NegativException() { }
    public NegativException(string message) : base(message) { }
    public NegativException(string message, Exception inner): base(message, inner) { }
    }

    public class eins
    {
    Exception e = new Exception();
    protected int wert;
    public virtual int Wert
    {
    get { return wert; }
    set
    {
    if (wert < 0)
    {
    throw (new NegativException("Unzulässiger Radius",e));
    }
    else
    wert = value;
    }
    }
    }

    public class zwei : eins { public override int Wert { get { return 2 * wert; } } }
    public class drei : zwei { public override int Wert { get { return 3 * wert; } } }

    class Program
    {
    static void Main(string[] args)
    {
    int eingabe = 1;
    eins a = new eins();
    zwei b = new zwei();
    drei c = new drei();

    while (eingabe != 0)
    {

    eingabe = int.Parse(Console.ReadLine());
    try
    {
    a.Wert = eingabe;
    }
    catch (NegativException e)
    {
    Console.WriteLine(e.Message);
    }

    a.Wert = eingabe;
    c.Wert = eingabe;

    Console.WriteLine("{0}, {1}, {2}", a.Wert, b.Wert, c.Wert);

    a = c;
    b = c;

    Console.WriteLine("{0}, {1}, {2}", a.Wert, b.Wert, c.Wert);
    }
    }
    }
    }
    [/highlight]

    Nur wird die Exception nicht geworfen weil ich als Fehlermeldung bekomme:
    "NegativException wurde nicht behandelt".

    Bei Galileo wurde allerdings nichts anderes gemacht als das was ich gemacht habe. Jedenfalls steht nicht mehr im Openbook und ich habe die dazugehörige Projectdatei nicht um nachzuschauen.
    Zuletzt editiert von gfoidl; 12.07.2010, 21:01. Reason: Code-Formatierung

  • #2
    Hallo,

    Die Exception wird schon geworfen (das macht throw). Schau mal was du unter Menü -> Debuggen -> Ausnahmen (strg+alt+e) eingestellt ist. -> Siehe Anhang.

    Lass das Programm mal im Release-Build laufen (strg+f5)


    BTW: Zeile 17 kannst du dir sparen.


    mfG Gü
    Attached Files
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      So hab mal meine Einstellungenhinzugefügt.
      Ju habs eben auch gesehen das er mir die Meldung auf dem Bildschirm ausgibt, nur wird das Fortsetzen des Programms unterbrochen. Was ja eigentlich der Sinn von Try Catch ist. Ich lande immer in der IDE mit der Meldung Exception wurde nicht behandelt
      Attached Files

      Comment


      • #4
        Hallo,

        geh mal mit dem Debugger Schritt für Schritt den Code durch und schau wann die Exception geworfen wird und wo dein try-catch ist. Das passt nicht zusammen (vielleicht auch deshalb da dein Bsp. etwas unübersichtlich ist).


        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Ju hab ich gerade gemacht, Lösung war eigentlich recht simple worauf ich hätte kommen müssen.

          Das ganze hat mit der Vererbung zu tun, da Zwei von Eins erbt und Drei von Zwei. Daher wird die Exeption tatsächlich später nicht behandelt da Sie nicht in einem Try Catch Block eingeschlossen ist.

          War leider nicht mein Beispiel sondern ne Alte Klausuraufgabe von 2009

          Comment


          • #6
            Hallo,

            ist zwar Offtopic, aber
            Klausuraufgabe
            interessiert mich schon. In welchen Zusammenhang sind diese Klausuren? Mir kommt das Beispiel dazu (viel zu) kurz vor. Alle meine Klausuren waren wesentlich länger und aufwändiger...(vielleicht da ich etwas anderes als Informatik udgl. studiert habe).


            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Ich Studiere Technische Informatik an der FH Friedberg am Freitag schreiben wir Objekt Orientierte Programmierung Schwerpunkt C#


              Sind 5 Aufgaben a 20 Punkte eine Aufgabe davon war:

              Aufgabe 2 (20 Punkte)
              Welche Ausgaben erzeugt das folgende Programm auf dem Bildschirm?
              Code:
              public class eins 
              { 
                  protected int wert; 
                  public virtual int Wert 
                  { 
                      get { return wert; } 
                      set { wert = value; } 
                  } 
              }
              public class zwei : eins 
              { 
                  public override int Wert 
                  { 
                      get { return 2 * wert; } 
                  }
              }
              
              public class drei : zwei 
              { 
                  public override int Wert 
                  {
                      get { return 3 * wert; }
                  } 
              }
              
              class Program
              { 
                  static void Main(string[] args)
                  { 
                      eins a = new eins();
                      zwei b = new zwei();
                      drei c = new drei();
                      
                      a.Wert = 1;
                      c.Wert = 2; 
                      
                      Console.WriteLine("{0}, {1}, {2}", a.Wert, b.Wert, c.Wert); 
                      
                      a = c;
                      b = c; 
                      
                      Console.WriteLine("{0}, {1}, {2}", a.Wert, b.Wert, c.Wert); } 
              }
              Und die darauf Folgende ergab mein Problem:

              Aufgabe 3 (20 Punkte)
              In der Klasse eins aus Aufgabe 2 soll in der set-Methode eine Ausnahme geworfen werden, wenn ein negativer Wert gesetzt werden soll: throw new Exception("Negativer Wert!");
              Schreiben Sie ein Hauptprogramm mit einer Eingabeschleife, in der Sie Werte von der Konsole eingeben. Wenn eine Ausnahme geworfen wird, soll diese abgefangen und die Meldung auf dem Bildschirm ausgegeben werden.

              Comment


              • #8
                Aha, danke für die Info.

                Ich liege wohl richtig in der Annahme dass du dir jetzt nicht erhoffst dass ich die Klausur-Aufgaben lösen


                mfG Gü
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment


                • #9
                  He he he
                  Ne ne hab eigentlich ein Relativ gutes Verständniss fürs Programmieren.
                  Nur hab ich bisher noch keine eigenen Exceptions Programmiert und daher war ich mir net sicher wo der Fehler lag.

                  Den Rest hab ich schon fast gelöst fehlt nur eine Aufgabe.
                  Des Problem ist halt nur das wir nicht am Rechner sitzen sondern schön auf einem Blatt Papier das Programm aufschreiben.

                  Des is schon was anderes ohne IntelliSense und Debugger

                  Comment


                  • #10
                    Des is schon was anderes ohne IntelliSense und Debugger
                    Stimmt. Fürs Gefühl wie der "Programmfluss" ist schadet das aber nicht. Mit der exakten Syntax hätte ich aber auch Probleme - daher mussten wir im Studium das nur mit Pseudocode machen (gottseidank).


                    mfG Gü
                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                    Comment


                    • #11
                      Ju ich denke halt auch das es net zu krass geahndet wird bei Syntax fehlern.
                      Letztes Semester in C wars ungefähr gleich. Vermute mal das dieser Fehler auch keinen Abzug gegeben und ich die 20 Pkt bekommen hätte

                      Comment


                      • #12
                        Vermute mal das dieser Fehler auch keinen Abzug gegeben und ich die 20 Pkt bekommen hätte
                        Bei mir nicht (ich weiß dass ich gemein bin).


                        So nun lass uns den Offtopic-Teil wieder beenden. Schließlich ist das ein Forum und kein Chat (auch wenn ich angefangen habe).


                        mfG Gü
                        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                        Comment


                        • #13
                          Hallo!

                          Habe mir grade mal den Code angeschaut.
                          Anmerkung: Die Exception wird erst geschmissen, wenn der Wert zum 2. Mal gesetzt wird, ODER?

                          Also, was ich damit sagen will:
                          Beim Setter muss es heißen:

                          Code:
                          if(value < 0)
                              throw new NegativException("Unzulässiger Radius",e);
                          Denn im Moment ist es doch so: wenn ich den Wert als erstes auf einen negativen Wert setze, passiert gar nichts. Und beim 2. Mal setzen dann, egal, ob der Wert auf positiv oder negativ (oder 0) gesetzt wird, zack - Exception.

                          Ok, wenn das erste Mal setzen >0 war, passiert auch nichts.

                          Soll das echt so sein?

                          Habe das mal geändert.

                          Code:
                          get { return wert; }
                          set
                          {
                              if (value < 0)
                               {
                                   throw new NegativException("Unzulässiger Radius",e); 
                               }
                               else
                                   wert = value;
                          }
                          MFG, Marko

                          Comment

                          Working...
                          X