Przechwytywanie wyjątków instrukcją try catch

Stronę tą wyświetlono już: 241 razy

Instrukcja try catch umożliwia przechwytywanie paskudnych wyjątków, które można również samemu definiować. Oto prosty przykład:

Listing 1
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace ProgramHandleException
  6. {
  7. class Program
  8. {
  9. class ToSmall : Exception // mój własny wyjątek, który wykorzystam, gdy wartość zmiennej będzie za mała
  10. {
  11. };
  12. class ToBig : Exception // mój własny wyjątek, który wykorzystam, gdy wartość zmiennej będzie za duża
  13. {
  14. };
  15. static void Main(string[] args)
  16. {
  17. int age = 0;
  18. do
  19. {
  20. Console.Write("Proszę podać wiek: ");
  21. try
  22. {
  23. age = int.Parse(Console.ReadLine());
  24. if (age <= 0)
  25. {
  26. throw new ToSmall(); // tworzę wyjątek do obsłużenia
  27. }
  28. else if (age > 120)
  29. {
  30. throw new ToBig(); // i tu też tworzę wyjątek do obsłużenia
  31. }
  32. }
  33. catch (ToSmall e) // obsługa wyjątku ToSmall (za mała)
  34. {
  35. Console.WriteLine("Zaniżyłeś swój wiek trochę za bardzo!");
  36. }
  37. catch (ToBig e) // obsługa wyjątku ToBig (za duża)
  38. {
  39. Console.WriteLine("Zawyżyłeś swój wiek trochę za bardzo!");
  40. }
  41. catch (FormatException e)
  42. {
  43. Console.WriteLine("Wpisałeś coś, co nie było liczbą!");
  44. }
  45. catch (Exception e) // inne wyjątki
  46. {
  47. Console.WriteLine("{0} wyjątek przechwycony", e);
  48. }
  49. } while (age <= 0 || age > 120);
  50. Console.ReadLine();
  51. }
  52. }
  53. }

Jak wynika z powyższego kodu, utworzenie własnego wyjątku wymaga stworzenia klasy, która z kolei musi dziedziczyć po klasie Exception. Obiekt tejże klasy należy utworzyć i wywołać za pomocą słowa kluczowego throw.

Przykładowy wynik działania powyższego kodu:

Proszę podać wiek: wiek
Wpisałeś coś, co nie było liczbą!
Proszę podać wiek: -1
Zaniżyłeś swój wiek trochę za bardzo!
Proszę podać wiek: 121
Zawyżyłeś swój wiek trochę za bardzo!
Proszę podać wiek: 20

Lista wszystkich dostępnych wyjątków:

  • System.AccessViolationException;
  • System.AppDomainUnloadedException;
  • System.ApplicationException;
  • System.ArgumentException;
  • System.ArgumentNullException;
  • System.ArgumentOutOfRangeException;
  • System.ArithmeticException;
  • System.ArrayTypeMismatchException;
  • System.BadImageFormatException;
  • System.CannotUnloadAppDomainException;
  • System.DataMisalignedException;
  • System.DivideByZeroException;
  • System.DllNotFoundException;
  • System.DuplicateWaitObjectException;
  • System.EntryPointNotFoundException;
  • System.Exception;
  • System.ExecutionEngineException;
  • System.FieldAccessException;
  • System.FormatException;
  • System.IndexOutOfRangeException;
  • System.InsufficientMemoryException;
  • System.InvalidCastException;
  • System.InvalidOperationException;
  • System.InvalidProgramException;
  • System.InvalidTimeZoneException;
  • System.MemberAccessException;
  • System.MethodAccessException;
  • System.MissingMemberException;
  • System.MissingMethodException;
  • System.MulticastNotSupportedException;
  • System.NotFiniteNumberException;
  • System.NotImplementedException;
  • System.NotSupportedException;
  • System.NullReferenceException;
  • System.ObjectDisposedException;
  • System.OperationCanceledException;
  • System.OutOfMemoryException;
  • System.OverflowException;
  • System.PlatformNotSupportedException;
  • System.RankException;
  • System.StackOverflowException;
  • System.SystemException;
  • System.TimeoutException;
  • System.TimeZoneNotFoundException;
  • System.TypeInitializationException;
  • System.TypeLoadException;
  • System.TypeUnloadedException;
  • System.UnauthorizedAccessException;
  • System.UriFormatException;

Komentarze