1. Wprowadzenie do C#
  2. Szybki start
  3. Pierwszy program
  4. Komentarze
  5. Typy danych
  6. Zmienne
  7. Pola
  8. Właściwości
  9. Stałe
  10. Metody
  11. Instrukcje warunkowe
  12. Pętle
  13. Tablice
  14. Kolekcje
  15. Klasy
  16. Dziedziczenie
  17. Polimorfizm
  18. Konwersja typów
  19. Właściwości klasy String
  20. Typy wyliczeniowe
  21. Interfejsy
  22. Klasy statyczne
  23. Klasy Abstrakcyjne
  24. Przestrzenie nazw
  25. Wyjątki
  26. Typy generyczne
  27. JSON
  28. XML
  29. Podsumowanie

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");
        }
    }
}
								
						
Wyjaśnienie

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.

Notatka

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.