| Autor |
Nachricht |
fr33g
Mitglied
Benutzerprofil
Anmeldungsdatum: 07.01.2010
Beiträge: 809
|
fr33g Mitglied
21:00:50 09.07.2012 Titel: |
Ausnahmen in C# |
Zitieren |
Hey Leute,
mal eine Frage zu den Ausnahmen, eher zur Nutzung von Ausnahmen in C#.
Also bei C++ habe ich es so gelernt, dass man eine Ausnahme nur werfen soll, wenn es auch wirklich eine Ausnahme ist, also ein unerwarteter Fehler und nicht bei jedem Mist.
Ist dies bei C# ebenso? Ich habe gehört, dort würden Exceptions viel öfter verwendet. Als Beispiel wäre da die Verwendung bei allen möglichen Arten von Plausibilitätsprüfungen( also eine Funktion erwartet eine Zahl in einem bestimmten Wertebereich die der User vorher eingeben muss ). Ist dies wirklich so?
Vielen Dank schonmal |
_________________ Das kann ich: C/C++, Asm, HTML, CSS, Javascript;
|
|
 |
Mechanics
Mitglied
Benutzerprofil
Anmeldungsdatum: 27.01.2012
Beiträge: 1368
|
Mechanics Mitglied
21:05:18 09.07.2012 Titel: |
|
Zitieren |
Beides. Ausnahmen natürlich nur auslösen, wenn es wirklich Ausnahmen sind. Aber die werden in C# auch viel öfter verwendet als in C++. Auch bei Plausibilitätsprüfungen, ja. Gibt ja auch genug vordefinierte Exceptions für sowas, z.B. InvalidArgumentException. |
|
|
|
 |
LordJaxom
Mitglied
Benutzerprofil
Anmeldungsdatum: 23.11.2005
Beiträge: 5697
|
LordJaxom Mitglied
09:15:57 10.07.2012 Titel: |
|
Zitieren |
Wobei die Erschaffer von .NET schnell festgestellt haben, dass eine Ausnahme bei jeder Plausibilität schnell auf die Leistung gehen kann, weshalb später die ganzen TryParse Methoden aufgenommen wurden.
Aber auch hier gilt: Ausnahmen, wenn es Ausnahmen sind (z.B. beim Parsen einer Zahl in einem Netzwerkprotokoll oder aus einem Textfeld, welches nur Ziffern zulassen sollte), und Kontrollen, wenn Fehler zu erwarten sind (z.B. beim Parsen einer Zahl aus einem Textfeld, welches nicht nur Ziffern zulässt). |
|
|
|
 |
fr33g
Mitglied
Benutzerprofil
Anmeldungsdatum: 07.01.2010
Beiträge: 809
|
fr33g Mitglied
10:04:38 10.07.2012 Titel: |
|
Zitieren |
Ok erst mal danke
Also noch ein Beispiel, wo man angeblich eine Exception wirft: Wenn ich ein Vokabelheft habe und ein neues Vokabelpaar hinzufügen möchte und das Heft voll ist. Aus C++ kenn ich es so dass ich dann einfach eine Meldung ausgebe und vll einen entsprechenden Rückgabewert, damit die aufrufende Funktion das ganze erkennt. Aber wirft man dann hier in C# tatsächlich auch eine Exception? |
_________________ Das kann ich: C/C++, Asm, HTML, CSS, Javascript;
|
|
 |
Dravere
Moderator
Benutzerprofil
Anmeldungsdatum: 13.06.2005
Beiträge: 8178
|
Dravere Moderator
11:29:50 10.07.2012 Titel: |
|
Zitieren |
| fr33g schrieb: | | Aus C++ kenn ich es so dass ich dann einfach eine Meldung ausgebe und vll einen entsprechenden Rückgabewert, damit die aufrufende Funktion das ganze erkennt. Aber wirft man dann hier in C# tatsächlich auch eine Exception? |
Das macht man sogar in C++ so. Rückgabewerte für Fehlerwerte sind in C üblich, wo man keine Exceptions hat. Einen Fehler direkt auf der Konsole ausgeben, ist fast nirgends eine gute Idee. Man kann es allenfalls einer Logging-Bibliothek melden.
Vielleicht solltest du dir mal die folgenden drei Artikel zu Exceptions in C++ aus unserem Magazin durchlesen:
Exception-Handling
Modernes Exception-Handling Teil 1 - Die Grundlagen
Modernes Exception-Handling Teil 2 - Hinter den Kulissen
Man kann hier allenfalls eine Funktion anbieten, welche prüft, ob das Heft schon voll ist, damit der Programmierer eine Prüfung machen kann, bevor er das Paar einfügt.
Die einzigen zwei wirklichen Unterschiede zwischen C++ und C# bei den Exceptions fällt mir vor allem bei den Parametern von Funktionen und dem Fehlen von undefiniertem Verhalten, bzw. ersetzen durch Exceptions, ein. In C++ fährt man den aus C bekannten Weg, welcher besagt, dass die Dokumentation spezifiziert, was man übergeben muss. Wenn man etwas falsches übergibt, resultiert dies in undefiniertem Verhalten. Dahinter steckt wahrscheinlich ursprünglich eine gewisse Performanceüberlegung, es ist aber fraglich, wie viel Performance man dadurch tatsächlich gewinnen kann. Inzwischen ist es mehr einfach eine übliche Vorgehensweise.
In C# setzt man halt mehr auf Sicherheit und genaue Fehler. Da es sowieso kein undefiniertes Verhalten wie in C++ gibt, probiert man die Laufzeitfehler möglichst genau zu machen. Wenn man z.B. auf eine Nullreferenz zugreift, bekommt man in C# von der CLR eine NullReferenceException. Statt dass die irgendwo auftaucht, probiert man halt sowas frühzeitig abzufangen, indem man die übergebenen Parameter einer Funktion prüft und dann eine ArgumentNullException wird. Für andere Fehlermöglichkeiten gilt dies natürlich dementsprechend. Das erleichtert die Fehlersuche, vor allem wenn man eine Bibliothek nutzt. Sonst kommt die NullReferenceException irgendwo aus dem Code der Bibliothek und man hat keine Ahnung was los ist.
Grüssli |
_________________ Danke für die Hilfe, Antwort oder Meinung!
C++: Std-Lib Referenz
C# .Net: MSDN kennt die Antwort
|
|
 |
|
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
|
|
|
|
|