Η δυνατότητα χειρισμού εξαιρέσεων της γλώσσας C# σάς βοηθά να χειρίζεστε τυχόν απροσδόκητες ή ασυνήθιστες καταστάσεις που προκύπτουν κατά την εκτέλεση του προγράμματός σας. Ο χειρισμός εξαιρέσεων χρησιμοποιεί τις λέξεις-κλειδιά try, catch και, τέλος, για να δοκιμάσει ορισμένες λειτουργίες για να χειριστεί αποτυχίες, και παρόλο που αυτές οι λειτουργίες έχουν τη δυνατότητα να αποτύχουν, μπορείτε να προσπαθήσετε να το κάνετε εάν είστε βέβαιοι ότι πρέπει να το κάνετε αυτό και θέλετε να καθαρίσετε τους πόρους στη συνέχεια. Χρόνος εκτέλεσης κοινής γλώσσας (CLR), . Το NET Framework ή οποιαδήποτε βιβλιοθήκη ή κώδικας εφαρμογής τρίτου μέρους μπορεί να δημιουργήσει εξαιρέσεις. Οι εξαιρέσεις δημιουργούνται χρησιμοποιώντας τη λέξη-κλειδί ρίψης. Σε πολλές περιπτώσεις, οι εξαιρέσεις μπορεί να μην προκύψουν από μια μέθοδο που καλείται απευθείας με κώδικα, αλλά με μια άλλη μέθοδο πιο κάτω στη στοίβα κλήσεων. Σε αυτήν την περίπτωση, το CLR επεκτείνει τη στοίβα για να δει εάν υπάρχει μια μέθοδος που περιέχει ένα μπλοκ σύλληψης για τον συγκεκριμένο τύπο εξαίρεσης και εάν βρει μια τέτοια μέθοδο, εκτελεί το πρώτο τέτοιο μπλοκ σύλληψης που βρέθηκε. Εάν δεν βρεθεί κατάλληλο μπλοκ σύλληψης πουθενά στη στοίβα κλήσεων, η διαδικασία τερματίζεται και εμφανίζεται ένα μήνυμα στον χρήστη. Σε αυτό το παράδειγμα, χρησιμοποιείται μια μέθοδος για να ανιχνευθεί εάν υπάρχει μια κατάσταση όπου διαιρείται με το μηδέν. Εάν υπάρχει, το σφάλμα συλλαμβάνεται. Εάν δεν υπάρχει χειρισμός εξαιρέσεων, αυτό το πρόγραμμα θα τερματιστεί και θα εμφανίσει ένα σφάλμα "DivideByZeroException Not Handled".- class ExceptionTest
- {
- static double SafeDivision(double x, double y)
- {
- if (y == 0)
- throw new System.DivideByZeroException();
- return x / y;
- }
- static void Main()
- {
- // Input for test purposes. Change the values to see
- // exception handling behavior.
- double a = 98, b = 0;
- double result = 0;
- try
- {
- result = SafeDivision(a, b);
- Console.WriteLine("{0} divided by {1} = {2}", a, b, result);
- }
- catch (DivideByZeroException e)
- {
- Console.WriteLine("Attempted divide by zero.");
- }
- }
- }
Αντιγραφή κώδικα
|