Intern
Čo sú výnimky v jazyku C#?
sobes.tech AI
Odpoveď od AI
Výnimky v jazyku C# sú abnormálne situácie alebo chyby, ktoré vznikajú počas behu programu a narušujú jeho normálny tok.
Umožňujú oddeliť kód spracovania chýb od hlavného logického kódu aplikácie a poskytujú štruktúrovanejší prístup k riadeniu chýb.
Hlavné aspekty výnimiek v C#:
- Typy výnimiek: C# má hierarchiu štandardných tried výnimiek, ktoré dedičia od základnej triedy
System.Exception. NapríkladSystem.NullReferenceException,System.DivideByZeroException,System.IO.FileNotFoundException. Je možné vytvárať aj vlastné triedy výnimiek. - Generovanie výnimiek (throw): Výnimka sa generuje pomocou kľúčového slova
throw. - Spracovanie výnimiek (try-catch): Blok
tryobsahuje kód, ktorý môže generovať výnimku. Blokcatchzachytí špecifický typ výnimky a vykoná kód pre jej spracovanie. - Záverečný blok (finally): Blok
finallysa vždy vykoná, bez ohľadu na to, či došlo k výnimke alebo nie. Často sa používa na uvoľnenie zdrojov. - Operátor using: Pohodlnejší spôsob správy zdrojov, ktorý garantuje volanie metódy
Dispose. Je analogický k štruktúretry-finallypre objekty implementujúce rozhranieIDisposable. - Filtre výnimiek: Umožňujú pridať podmienku k bloku
catchpre špecifickejšie spracovanie výnimiek.
Príklad použitia:
public class Example
{
public void ProcessData(int denominator)
{
try
{
int result = 10 / denominator; // Môže generovať DivideByZeroException
Console.WriteLine($"Výsledok: {result}");
}
catch (DivideByZeroException ex) // Zachytáva konkrétne výnimky
{
Console.WriteLine("Chyba: nemožno deliť nulou.");
// Logovanie výnimky, ak je potrebné
// Console.WriteLine($"Detaily výnimky: {ex.Message}");
}
catch (Exception ex) // Zachytáva akúkoľvek inú výnimku
{
Console.WriteLine($"Nastala neočakávaná chyba: {ex.Message}");
}
finally // Tento blok sa vždy vykoná
{
Console.WriteLine("Spracovanie dokončené.");
}
}
public void UsingExample()
{
// Príklad použitia `using` na automatické volanie Dispose
using (StreamReader reader = new StreamReader("file.txt"))
{
string line = reader.ReadLine();
Console.WriteLine(line);
} // Tu sa volanie reader.Dispose() vykoná automaticky, aj keď dôjde k výnimke
}
public void ThrowExample(int value)
{
if (value < 0)
{
throw new ArgumentOutOfRangeException(nameof(value), "Hodnota musí byť nezáporná."); // Generovanie vlastnej výnimky
}
// ... ďalšia logika
}
}