Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C# und .NET ::  Ausnahmen in C#     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
fr33g
Mitglied

Benutzerprofil
Anmeldungsdatum: 07.01.2010
Beiträge: 809
Beitrag 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
Beitrag 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
Beitrag 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
Beitrag 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
Beitrag 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
c++.de :: C# und .NET ::  Ausnahmen in C#   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




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.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.