Intern
Co jsou výjimky v jazyce C#?
sobes.tech AI
Odpověď od AI
Výjimky v C# jsou abnormální situace nebo chyby, které nastávají během běhu programu a narušují jeho normální tok.
Umožňují oddělit kód pro zpracování chyb od hlavního kódu logiky aplikace a poskytují strukturovanější přístup k řízení chyb.
Hlavní aspekty výjimek v C#:
- Typy výjimek: C# má hierarchii standardních tříd výjimek, které dědí od základní třídy
System.Exception. NapříkladSystem.NullReferenceException,System.DivideByZeroException,System.IO.FileNotFoundException. Je možné vytvářet i vlastní třídy výjimek. - Generování výjimek (throw): Výjimka je generována pomocí klíčového slova
throw. - Zachycení výjimek (try-catch): Blok
tryobsahuje kód, který může generovat výjimku. Blokcatchzachytí specifický typ výjimky a provede kód pro její zpracování. - Závěrečný blok (finally): Blok
finallyse vždy provede, ať už došlo k výjimce nebo ne. Často se používá k uvolnění zdrojů. - Operátor using: Pohodlnější způsob správy zdrojů, který zaručuje volání metody
Dispose. Je analogický konstrukcitry-finallypro objekty implementující rozhraníIDisposable. - Filtry výjimek: Umožňují přidat podmínku k bloku
catchpro specifičtější zpracování výjimek.
Příklad použití:
public class Example
{
public void ProcessData(int denominator)
{
try
{
int result = 10 / denominator; // Může generovat DivideByZeroException
Console.WriteLine($"Výsledek: {result}");
}
catch (DivideByZeroException ex) // Zachytává konkrétní výjimku
{
Console.WriteLine("Chyba: nelze dělit nulou.");
// Logování výjimky, pokud je potřeba
// Console.WriteLine($"Detaily výjimky: {ex.Message}");
}
catch (Exception ex) // Zachytává jakoukoli jinou výjimku
{
Console.WriteLine($"Nastala neočekávaná chyba: {ex.Message}");
}
finally // Tento blok se vždy provede
{
Console.WriteLine("Zpracování dokončeno.");
}
}
public void UsingExample()
{
// Příklad použití `using` pro automatické volání Dispose
using (StreamReader reader = new StreamReader("file.txt"))
{
string line = reader.ReadLine();
Console.WriteLine(line);
} // Zde je volání reader.Dispose() automatické, i když dojde k výjimce
}
public void ThrowExample(int value)
{
if (value < 0)
{
throw new ArgumentOutOfRangeException(nameof(value), "Hodnota musí být nezáporná."); // Generování vlastní výjimky
}
// ... další logika
}
}