Stronę tą wyświetlono już: 2958 razy
Instrukcja try catch umożliwia przechwytywanie paskudnych wyjątków, które można również samemu definiować. Oto prosty przykład:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ProgramHandleException
{
class Program
{
class ToSmall : Exception // mój własny wyjątek, który wykorzystam, gdy wartość zmiennej będzie za mała
{
};
class ToBig : Exception // mój własny wyjątek, który wykorzystam, gdy wartość zmiennej będzie za duża
{
};
static void Main(string[] args)
{
int age = 0;
do
{
Console.Write("Proszę podać wiek: ");
try
{
age = int.Parse(Console.ReadLine());
if (age <= 0)
{
throw new ToSmall(); // tworzę wyjątek do obsłużenia
}
else if (age > 120)
{
throw new ToBig(); // i tu też tworzę wyjątek do obsłużenia
}
}
catch (ToSmall e) // obsługa wyjątku ToSmall (za mała)
{
Console.WriteLine("Zaniżyłeś swój wiek trochę za bardzo!");
}
catch (ToBig e) // obsługa wyjątku ToBig (za duża)
{
Console.WriteLine("Zawyżyłeś swój wiek trochę za bardzo!");
}
catch (FormatException e)
{
Console.WriteLine("Wpisałeś coś, co nie było liczbą!");
}
catch (Exception e) // inne wyjątki
{
Console.WriteLine("{0} wyjątek przechwycony", e);
}
} while (age <= 0 || age > 120);
Console.ReadLine();
}
}
}
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;