Uwaga
DostÄp do tej strony wymaga autoryzacji. Może spróbowaÄ zalogowaÄ siÄ lub zmieniÄ katalogi.
DostÄp do tej strony wymaga autoryzacji. Możesz spróbowaÄ zmieniÄ katalogi.
Funkcje obsÅugi wyjÄ
tków jÄzyka C# uÅatwiajÄ
radzenie sobie z nieoczekiwanymi lub wyjÄ
tkowymi sytuacjami, które wystÄpujÄ
, gdy program jest uruchomiony. ObsÅuga wyjÄ
tków używa sÅów kluczowych try
, catch
i finally
do wykonywania dziaÅaÅ, które mogÄ
siÄ nie powieÅÄ, do radzenia sobie z niepowodzeniami, gdy uznasz to za zasadne, oraz do oczyszczania zasobów później. WyjÄ
tki mogÄ
byÄ generowane przez Årodowisko uruchomieniowe jÄzyka wspólnego (CLR), biblioteki platformy .NET lub innych firm lub kod aplikacji. WyjÄ
tki sÄ
tworzone przy użyciu sÅowa kluczowego throw
.
W wielu przypadkach wyjÄ
tek może byÄ zgÅaszany nie przez metodÄ wywoÅywanÄ
bezpoÅrednio przez kod, ale przez innÄ
metodÄ dalej w stosie wywoÅaÅ. Po wystÄ
pieniu wyjÄ
tku clR rozwinie stos, wyszukuje metodÄ z blokiem catch
dla okreÅlonego typu wyjÄ
tku i wykona pierwszy taki catch
blok, który znajdzie. JeÅli nie znajdzie odpowiedniego catch
bloku w dowolnym miejscu w stosie wywoÅaÅ, zakoÅczy proces i wyÅwietli komunikat dla użytkownika.
W tym przykÅadzie metoda testuje dzielenie wedÅug zera i przechwytuje bÅÄ d. Bez obsÅugi wyjÄ tków ten program zakoÅczyÅby siÄ z bÅÄdem DivideByZeroException, który nie zostaÅ obsÅużony.
public class ExceptionTest
{
static double SafeDivision(double x, double y)
{
if (y == 0)
throw new DivideByZeroException();
return x / y;
}
public static void Main()
{
// Input for test purposes. Change the values to see
// exception handling behavior.
double a = 98, b = 0;
double result;
try
{
result = SafeDivision(a, b);
Console.WriteLine($"{a} divided by {b} = {result}");
}
catch (DivideByZeroException)
{
Console.WriteLine("Attempted divide by zero.");
}
}
}
Omówienie wyjÄ tków
WyjÄ tki majÄ nastÄpujÄ ce wÅaÅciwoÅci:
- WyjÄ
tki to typy, które ostatecznie pochodzÄ
z klasy
System.Exception
. - Użyj bloku
try
wokóŠinstrukcji, które mogÄ zgÅaszaÄ wyjÄ tki. - Po wystÄ
pieniu wyjÄ
tku w bloku
try
, przepÅyw kontroli przechodzi do pierwszego skojarzonego programu obsÅugi wyjÄ tków, który znajduje siÄ w dowolnym miejscu w stosie wywoÅaÅ. W jÄzykucatch
C#sÅowo kluczowe jest używane do definiowania procedury obsÅugi wyjÄ tków. - JeÅli nie ma programu obsÅugi wyjÄ tków dla danego wyjÄ tku, program zatrzymuje wykonywanie z komunikatem o bÅÄdzie.
- Nie przechwytuj wyjÄ
tku, chyba że możesz go obsÅużyÄ i pozostawiÄ aplikacjÄ w opisanym stanie. JeÅli przechwycisz
System.Exception
, rzuÄ go ponownie, używajÄ c sÅowa kluczowegothrow
na koÅcu blokucatch
. -
catch
JeÅli blok definiuje zmiennÄ wyjÄ tku, możesz jej użyÄ, aby uzyskaÄ wiÄcej informacji o typie wyjÄ tku, który wystÄ piÅ. - WyjÄ
tki mogÄ
byÄ jawnie generowane przez program przy użyciu sÅowa kluczowego
throw
. - Obiekty wyjÄ tków zawierajÄ szczegóÅowe informacje o bÅÄdzie, takie jak stan stosu wywoÅaÅ i opis tekstu bÅÄdu.
- Kod w
finally
bloku jest wykonywany niezależnie od tego, czy jest zgÅaszany wyjÄ tek. Użyj blokufinally
, aby zwolniÄ zasoby, na przykÅad zamknÄ Ä wszystkie strumienie lub pliki, które zostaÅy otwarte w blokutry
. - WyjÄ tki zarzÄ dzane na platformie .NET sÄ implementowane na podstawie mechanizmu obsÅugi wyjÄ tków strukturalnych Win32. Aby uzyskaÄ wiÄcej informacji, zobacz ObsÅuga wyjÄ tków ustrukturyzowanych (C/C++) oraz Podstawy obsÅugi wyjÄ tków ustrukturyzowanych w systemie Win32.
Specyfikacja jÄzyka C#
Aby uzyskaÄ wiÄcej informacji, zobacz WyjÄ tki w specyfikacji jÄzyka C#. Specyfikacja jÄzyka jest ostatecznym źródÅem informacji o skÅadni i użyciu jÄzyka C#.