Wyjątki definiowane
przez użytkownika
W języku C# można również definiować własne wyjątki, pochodzące z klasy Exception lub jej podklasy. Definiowanie własnych wyjątków pozwala na dostosowanie komunikatów błędu do konkretnej sytuacji i ułatwia obsługę błędów w kodzie.
Aby utworzyć własny wyjątek, trzeba utworzyć nową klasę dziedziczącą po klasie Exception lub jednej z jej podklas. Na przykład:
public class MyException : Exception
{
public MyException(string message) : base(message)
{
throw new MyException("Mój wyjątek");
}
}
oto dłuższy przykład, który ilustruje Wyjątki definiowane przez użytkownika w języku C#:
using System;
// Definicja własnego wyjątku MojWyjatek dziedziczącego po klasie Exception
class MojWyjatek : Exception
{
public MojWyjatek(string komunikat) : base(komunikat)
{
}
public MojWyjatek(string komunikat, Exception innerException) : base(komunikat, innerException)
{
}
}
class Program
{
// Metoda Dzielenie wykonująca dzielenie a przez b
static int Dzielenie(int a, int b)
{
if (b == 0)
{
// Rzucenie wyjątku MojWyjatek w przypadku dzielenia przez zero
throw new MojWyjatek("Nie można dzielić przez zero");
}
return a / b;
}
static void Main(string[] args)
{
try
{
int wynik = Dzielenie(10, 0);
}
catch (MojWyjatek ex)
{
// Obsługa wyjątku MojWyjatek
Console.WriteLine("Wystąpił błąd: " + ex.Message);
}
catch (Exception ex)
{
// Obsługa innych wyjątków
Console.WriteLine("Wystąpił nieznany błąd");
}
}
}
Wystąpił błąd: Nie można dzielić przez zero
W tym przykładzie utworzyliśmy klasę MojWyjatek która dziedziczy po klasie Exception i posiada dwa konstruktory: jeden przyjmuje tylko jeden argument komunikat, a drugi przyjmuje komunikat oraz innerexception. Następnie w metodzie Dzielenie rzucamy wyjątek MojWyjatek w momencie gdy b == 0, który jest obsługiwany w bloku catch. W przykładzie też mamy jeszcze jeden blok catch, który obsługuje pozostałe wyjątki.
Ważne jest, aby pamiętać, że własne wyjątki powinny być rzucane tylko w sytuacjach, w których jest to naprawdę konieczne, a nie jako sposób na przechwytywanie błędów, które mogłyby być obsłużone w inny sposób.